slate/scenes/SceneSlates.js

162 lines
4.9 KiB
JavaScript
Raw Normal View History

import * as React from "react";
2020-08-12 11:34:17 +03:00
import * as Constants from "~/common/constants";
import * as System from "~/components/system";
import * as SVG from "~/common/svg";
import { css } from "@emotion/react";
2020-09-03 02:17:31 +03:00
import { TabGroup } from "~/components/core/TabGroup";
import { ButtonSecondary } from "~/components/system/components/Buttons";
import { SearchModal } from "~/components/core/SearchModal";
import { dispatchCustomEvent } from "~/common/custom-events";
2020-09-25 09:31:56 +03:00
import { WarningMessage } from "~/components/core/WarningMessage";
import ScenePage from "~/components/core/ScenePage";
2020-08-22 07:25:34 +03:00
import ScenePageHeader from "~/components/core/ScenePageHeader";
2020-07-27 11:33:39 +03:00
import Section from "~/components/core/Section";
2020-10-02 02:44:22 +03:00
import SlatePreviewBlocks from "~/components/core/SlatePreviewBlock";
2020-09-01 07:44:56 +03:00
import CircleButtonGray from "~/components/core/CircleButtonGray";
2020-09-02 03:15:56 +03:00
import EmptyState from "~/components/core/EmptyState";
const STYLES_ICONS = css`
display: flex;
flex-direction: row;
justify-content: center;
`;
// TODO(jim): Slates design.
export default class SceneSlates extends React.Component {
2020-09-01 07:44:56 +03:00
state = {
2020-09-03 02:17:31 +03:00
tab: 0,
2020-09-01 07:44:56 +03:00
};
_handleAdd = () => {
2020-09-04 01:42:08 +03:00
this.props.onAction({
2020-09-01 07:44:56 +03:00
name: "Create slate",
type: "SIDEBAR",
value: "SIDEBAR_CREATE_SLATE",
});
2020-09-04 01:42:08 +03:00
this.props.onRehydrate();
2020-09-01 07:44:56 +03:00
};
_handleSearch = () => {
dispatchCustomEvent({
name: "create-modal",
detail: { modal: <SearchModal onAction={this.props.onAction} /> },
});
};
render() {
2020-09-03 02:24:10 +03:00
let subscriptions = this.props.viewer.subscriptions
.filter((each) => {
return !!each.target_slate_id;
})
2020-10-02 02:44:22 +03:00
.map((relation) => relation.slate);
// .map((relation) => (
// <div
// key={relation.slate.id}
// onClick={() =>
// this.props.onAction({
// type: "NAVIGATE",
// value: "V1_NAVIGATION_SLATE",
// data: relation.slate,
// })
// }
// >
// <SlatePreviewBlock username={null} slate={relation.slate} />
// </div>
// ));
2020-09-03 02:24:10 +03:00
2020-07-27 11:33:39 +03:00
return (
<ScenePage>
2020-09-01 07:44:56 +03:00
<ScenePageHeader
title="Slates"
actions={
2020-09-03 02:17:31 +03:00
this.state.tab === 0 ? (
2020-09-01 07:44:56 +03:00
<CircleButtonGray
2020-10-01 03:41:53 +03:00
onClick={this._handleAdd}
2020-09-01 07:44:56 +03:00
style={{ marginLeft: 12 }}
>
<SVG.Plus height="16px" />
</CircleButtonGray>
) : null
}
/>
2020-09-25 08:32:56 +03:00
2020-09-03 02:17:31 +03:00
<TabGroup
tabs={["My Slates", "Following"]}
value={this.state.tab}
onChange={(value) => this.setState({ tab: value })}
/>
2020-09-03 09:00:02 +03:00
2020-09-08 01:16:02 +03:00
{this.state.tab === 0 ? (
this.props.viewer.slates && this.props.viewer.slates.length ? (
2020-10-02 02:44:22 +03:00
<SlatePreviewBlocks
editing
slates={this.props.viewer.slates}
username={this.props.viewer.username}
onAction={this.props.onAction}
/>
2020-09-08 01:16:02 +03:00
) : (
<EmptyState>
<div css={STYLES_ICONS}>
<SVG.Sound height="24px" style={{ margin: "0 16px" }} />
<SVG.Document height="24px" style={{ margin: "0 16px" }} />
<SVG.Image height="24px" style={{ margin: "0 16px" }} />
<SVG.Book height="24px" style={{ margin: "0 16px" }} />
<SVG.Video height="24px" style={{ margin: "0 16px" }} />
</div>
<div style={{ marginTop: 24 }}>
Use slates to create mood boards, share files, and organize
research.
</div>
<ButtonSecondary
onClick={this._handleAdd}
style={{ marginTop: 32 }}
>
Create slate
</ButtonSecondary>
2020-09-08 01:16:02 +03:00
</EmptyState>
)
) : null}
2020-10-02 02:44:22 +03:00
{/* this.props.viewer.slates.map((slate) => (
<div
key={slate.id}
onClick={() =>
this.props.onAction({
type: "NAVIGATE",
value: slate.id,
data: { decorator: "SLATE", ...slate },
})
}
>
<SlatePreviewBlock
slate={slate}
username={this.props.viewer.username}
editing
/>
</div>
)) */}
2020-09-08 01:16:02 +03:00
{this.state.tab === 1 ? (
2020-09-14 23:42:52 +03:00
subscriptions && subscriptions.length ? (
2020-10-02 02:44:22 +03:00
<SlatePreviewBlocks
slates={subscriptions}
username={null}
onAction={this.props.onAction}
/>
2020-09-08 01:16:02 +03:00
) : (
<EmptyState>
You can follow any public slates on the network.
<ButtonSecondary
onClick={this._handleSearch}
style={{ marginTop: 32 }}
>
Browse slates
</ButtonSecondary>
2020-09-08 01:16:02 +03:00
</EmptyState>
)
) : null}
2020-07-27 11:33:39 +03:00
</ScenePage>
);
}
}