import * as React from "react"; import * as Actions from "~/common/actions"; import * as Constants from "~/common/constants"; import * as System from "~/components/system"; import * as SVG from "~/components/system/svg"; import { css } from "@emotion/react"; import ScenePage from "~/components/core/ScenePage"; import CodeBlock from "~/components/system/CodeBlock"; const STYLES_KEY = css` display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; width: 100%; max-width: 416px; background-color: ${Constants.system.black}; color: ${Constants.system.white}; border: 4px solid ${Constants.system.black}; border-radius: 36px; `; const STYLES_KEY_LEFT = css` min-width: 10%; width: 100%; font-family: ${Constants.font.code}; padding: 12px 16px 12px 16px; font-size: 11px; `; const STYLES_KEY_RIGHT = css` padding-left: 24px; flex-shrink: 0; `; const STYLES_CIRCLE_BUTTON = css` height: 32px; width: 32px; border-radius: 32px; display: inline-flex; align-items: center; justify-content: center; user-select: none; background: ${Constants.system.white}; color: ${Constants.system.black}; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.07); cursor: pointer; transition: 200ms ease all; :hover { background: ${Constants.system.brand}; color: ${Constants.system.white}; } `; class Key extends React.Component { state = { visible: false }; _handleToggleVisible = () => { this.setState({ visible: !this.state.visible }); }; _handleDelete = async (id) => { await this.props.onDelete(id); }; render() { return (
{this.state.visible ? (
{this.props.data.key}
) : (
XXXXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXX
)}
this._handleDelete(this.props.data.id)} style={{ marginRight: 4, }}>
); } } const EXAMPLE_GET_SLATE = (key, slateId) => `const response = await fetch('https://slate.host/api/v1/get-slate', { method: 'POST', headers: { 'Content-Type': 'application/json', // NOTE: your API key Authorization: 'Basic ${key}', }, body: JSON.stringify({ data: { // NOTE: your slate ID id: ${slateId} }}) }); const json = await response.json(); console.log(json);`; const EXAMPLE_GET = (key) => `const response = await fetch('https://slate.host/api/v1/get', { method: 'POST', headers: { 'Content-Type': 'application/json', // NOTE: your API key Authorization: 'Basic ${key}', }, body: JSON.stringify({ data: { // NOTE: optional, if you want your private slates too. private: false }}) }); const json = await response.json(); console.log(json);`; const EXAMPLE_GET_SLATE_RESPONSE = (key, slateId) => `{ data: { id: '${slateId}', updated_at: '2020-07-27T09:04:53.007Z', created_at: '2020-07-27T09:04:53.007Z', published_at: '2020-07-27T09:04:53.007Z', slatename: 'slatename', data: { name: "slatename", public: true, objects: [ { id: "data-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", name: "data-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", ownerId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", url: "https://slate.host/static/social.png" } ], ownerId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" } } }`; const EXAMPLE_UPLOAD_TO_SLATE = (key, slateId) => `const url = 'https://slate.host/api/v1/upload-data/${slateId}'; let file = e.target.files[0]; let data = new FormData(); data.append("data", file); const response = await fetch(url, { method: 'POST', headers: { // NOTE: your API key Authorization: 'Basic ${key}', }, body: data }); const json = await response.json(); // NOTE: the URL to your asset will be available in the JSON response. console.log(json);`; export default class SceneSettingsDeveloper extends React.Component { state = { loading: false, }; _handleSave = async (e) => { this.setState({ loading: true }); const response = await Actions.generateAPIKey(); if (response && response.error) { // TODO(jim): Proper error message. alert(response.decorator); return this.setState({ loading: false }); } await this.props.onRehydrate(); this.setState({ loading: false }); }; _handleDelete = async (id) => { this.setState({ loading: true }); if (!window.confirm("Are you sure you want to delete this key? This action is irreversible")) { this.setState({ loading: false }); return; } const response = await Actions.deleteAPIKey({ id }); if (response && response.error) { // TODO(jim): Proper error message. alert(response.decorator); return this.setState({ loading: false }); } await this.props.onRehydrate(); this.setState({ loading: false }); }; async componentDidMount() { if (!this.props.viewer.keys) { return; } if (!this.props.viewer.keys.length) { return; } const response = await fetch("/api/v1/get-slate", { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Basic ${this.props.viewer.keys[0].key}`, }, }); const json = await response.json(); console.log(json); } render() { let key; if (this.props.viewer.keys) { if (this.props.viewer.keys.length) { key = this.props.viewer.keys[0].key; } } let slateId = "your-slate-uuid-v4-value"; if (this.props.viewer.slates) { if (this.props.viewer.slates.length) { slateId = this.props.viewer.slates[0].id; } } return ( Developer API {this.props.viewer.keys.map((k) => { return ; })}
Generate
{key ? ( Usage (JavaScript)

) : null}
); } }