import * as React from "react"; import * as Strings from "~/common/strings"; import * as Constants from "~/common/constants"; import * as System from "~/components/system"; import * as Validations from "~/common/validations"; import * as Actions from "~/common/actions"; import { dispatchCustomEvent } from "~/common/custom-events"; import { css } from "@emotion/core"; const SLATE_LIMIT = 50; const STYLES_GROUP = css` display: flex; align-items: center; justify-content: space-between; width: 100%; overflow-wrap: break-word; white-space: pre-wrap; margin-top: 8px; `; const STYLES_HEADER = css` font-family: ${Constants.font.semiBold}; margin-top: 32px; `; export default class SidebarCreateSlate extends React.Component { state = { name: "", public: true, body: "", loading: false, }; _handleSubmit = async () => { if (this.props.viewer.slates.length >= SLATE_LIMIT) { dispatchCustomEvent({ name: "create-alert", detail: { alert: { message: `You have reached the limit of ${SLATE_LIMIT} Slates!`, }, }, }); return; } this.setState({ loading: true }); if (!Validations.slatename(this.state.name)) { dispatchCustomEvent({ name: "create-alert", detail: { alert: { message: "Please provide a name between 1-48 characters." }, }, }); this.setState({ loading: false }); return; } const response = await this.props.onSubmit({ type: "CREATE_SLATE", name: this.state.name, public: this.state.public, body: this.state.body, }); if (!response) { dispatchCustomEvent({ name: "create-alert", detail: { alert: { message: "We're having trouble connecting right now. Please try again later", }, }, }); return; } if (response.error) { dispatchCustomEvent({ name: "create-alert", detail: { alert: { decorator: response.decorator } }, }); return; } if (this.props.sidebarData && this.props.sidebarData.files) { let data = this.props.sidebarData.files.map((file) => { return { title: file.title || file.name, ...file }; }); const addResponse = await Actions.addFileToSlate({ slate: response.slate, data, fromSlate: this.props.sidebarData.fromSlate, }); if (!addResponse) { dispatchCustomEvent({ name: "create-alert", detail: { alert: { message: "We're having trouble connecting right now. Please try again later", }, }, }); return; } if (addResponse.error) { dispatchCustomEvent({ name: "create-alert", detail: { alert: { decorator: response.decorator } }, }); return; } const { added, skipped } = addResponse; let message = Strings.formatAsUploadMessage(added, skipped, true); if (message) { dispatchCustomEvent({ name: "create-alert", detail: { alert: { message, status: !added ? null : "INFO" }, }, }); } } this.setState({ loading: false }); this.props.onAction({ type: "NAVIGATE", value: response.slate.id, data: response.slate, }); }; _handleCancel = () => { this.props.onCancel(); }; _handleChange = (e) => { this.setState({ [e.target.name]: e.target.value }); }; render() { return (
Create slate Name Your slate URL will be:{" "} https://slate.host/ {this.props.viewer.username}/{Strings.createSlug(this.state.name)} Description Privacy
{this.state.public ? "Public. Anyone can search for and view this slate." : "Private. Only you can view this slate."}
Create {this.state.name}
); } }