import * as React from "react"; import * as Actions from "~/common/actions"; import * as Window from "~/common/window"; import * as Constants from "~/common/constants"; import * as System from "~/components/system"; import * as SVG from "~/common/svg"; import * as Events from "~/common/custom-events"; import { css } from "@emotion/react"; import { TabGroup, PrimaryTabGroup, SecondaryTabGroup } from "~/components/core/TabGroup"; import ScenePage from "~/components/core/ScenePage"; import ScenePageHeader from "~/components/core/ScenePageHeader"; import SquareButtonGray from "~/components/core/SquareButtonGray"; import APIDocsGetV1 from "~/components/api-docs/v1/get"; import APIDocsGetSlateV1 from "~/components/api-docs/v1/get-slate.js"; import APIDocsUpdateSlateV1 from "~/components/api-docs/v1/update-slate.js"; import APIDocsUploadToSlateV1 from "~/components/api-docs/v1/upload.js"; import APIDocsGetV2 from "~/components/api-docs/v2/get"; import APIDocsGetSlateV2 from "~/components/api-docs/v2/get-slate.js"; import APIDocsGetUserV2 from "~/components/api-docs/v2/get-user.js"; import APIDocsUpdateSlateV2 from "~/components/api-docs/v2/update-slate.js"; import APIDocsUpdateFileV2 from "~/components/api-docs/v2/update-file.js"; import APIDocsUploadToSlateV2 from "~/components/api-docs/v2/upload.js"; const STYLES_API_KEY = css` height: 40px; border-radius: 4px; cursor: copy; background-color: ${Constants.system.white}; outline: none; border: none; width: 380px; font-family: ${Constants.font.code}; padding: 0 16px; font-size: 14px; `; const STYLES_KEY_CONTAINER = css` height: 40px; display: flex; flex-direction: row; align-items: center; margin-bottom: 8px; `; class Key extends React.Component { _input; state = { visible: false, copying: false }; _handleDelete = async (id) => { await this.props.onDelete(id); }; _handleCopy = async () => { this._input.select(); document.execCommand("copy"); await this.setState({ copying: true }); await Window.delay(1000); await this.setState({ copying: false }); }; render() { return (
{ this._input = c; }} value={this.state.copying ? "Copied!" : this.props.data.key} readOnly type={this.state.visible || this.state.copying ? "text" : "password"} css={STYLES_API_KEY} onClick={this._handleCopy} onMouseEnter={() => this.setState({ visible: true })} onMouseLeave={() => this.setState({ visible: false })} /> this._handleDelete(this.props.data.id)} style={{ marginLeft: 8, }} >
); } } export default class SceneSettingsDeveloper extends React.Component { _bucketCID; state = { loading: false, language: "javascript", docs: "GET", copying: false, tab: 0, }; _handleCopy = async () => { this._bucketCID.select(); document.execCommand("copy"); await this.setState({ copying: true }); await Window.delay(1000); await this.setState({ copying: false }); }; _handleSave = async (e) => { this.setState({ loading: true }); const response = await Actions.generateAPIKey(); Events.hasError(response); this.setState({ loading: false }); }; _handleDelete = async (id) => { this.setState({ loading: true }); if ( !window.confirm( "Are you sure you want to revoke this API key? Any services using it will no longer be able to access your Slate account" ) ) { this.setState({ loading: false }); return; } const response = await Actions.deleteAPIKey({ id }); Events.hasError(response); this.setState({ loading: false }); }; _handleChangeLanguage = (newLanguage) => { this.setState({ language: newLanguage }); }; render() { let APIKey = "YOUR-API-KEY-HERE"; let lang = this.state.language; if (this.props.viewer.keys) { if (this.props.viewer.keys.length) { APIKey = this.props.viewer.keys[0].key; } } const userId = this.props.viewer.id; let slateId = "YOUR-SLATE-ID-VALUE"; if (this.props.viewer.slates) { if (this.props.viewer.slates.length) { slateId = this.props.viewer.slates[0].id; } } let userBucketCID = this.props.viewer?.userBucketCID; if (userBucketCID) { userBucketCID = userBucketCID.replace("/ipfs/", ""); } return ( {/*
this._changeDocs("INTRO")}> Introduction api
this._changeDocs("GET")} > Get all slates this._changeDocs("GET_SLATE")} > Get slate by ID this._changeDocs("UPLOAD_TO_SLATE")} > Upload to slate by ID this._changeDocs("UPDATE_SLATE")} > Update slate
guides
*/} You can use your API keys to access your account information outside of Slate and upload files to Slate. You can have a maximum of 10 keys at any given time. {userBucketCID && (
{ this._bucketCID = c; }} onClick={this._handleCopy} />
)}
{this.props.viewer.keys.map((k) => { return ; })}
{this.props.viewer.keys.length < 10 ? ( Generate ) : ( Generate )} {this.props.viewer.keys.length === 0 ? ( Generate an API key to have it appear in the code examples ) : null}
{/*
this._handleChangeLanguage("javascript")} > JS ICON Node.js
this._handleChangeLanguage("python")} > PY ICON Python3
*/} Slate is currently on v2.0 of the API. While prior versions are still supported, we recommend using the most up to date version. this.setState({ tab })} /> {this.state.tab === 0 ? ( <> ) : ( <> )}
); } }