From 451e5fbbaac5e8d9568c596bb62d38d1971efe14 Mon Sep 17 00:00:00 2001 From: Filipe Freire Date: Fri, 9 Sep 2022 23:13:35 +0100 Subject: [PATCH] [INS-901] Empty state for Dashboard (#5157) * [INS-901] Empty state for Dashboard * add typings Co-authored-by: Mark Kim --- .../panes/wrapper-home-empty-state-pane.tsx | 110 ++++++++++++++++++ .../src/ui/components/wrapper-home.tsx | 13 ++- 2 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 packages/insomnia/src/ui/components/panes/wrapper-home-empty-state-pane.tsx diff --git a/packages/insomnia/src/ui/components/panes/wrapper-home-empty-state-pane.tsx b/packages/insomnia/src/ui/components/panes/wrapper-home-empty-state-pane.tsx new file mode 100644 index 0000000000..b3ce5cb993 --- /dev/null +++ b/packages/insomnia/src/ui/components/panes/wrapper-home-empty-state-pane.tsx @@ -0,0 +1,110 @@ +import { Button, Dropdown, DropdownItem } from 'insomnia-components'; +import React, { FC } from 'react'; +import styled from 'styled-components'; + +import { superFaint, ultraFaint } from '../../css/css-in-js'; + +const Wrapper = styled.div({ + maxHeight: '100%', + height: 'calc(100% - 4 * var(--padding-xl))', + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + padding: 'var(--padding-xl) var(--padding-xl)', + textAlign: 'center', + ...superFaint, +}); + +const Divider = styled.div({ + color: 'var(--color-font)', + maxWidth: 500, + width: '100%', + margin: 'var(--padding-md) 0', + display: 'flex', + alignItems: 'center', + fontSize: 'var(--text-sm)', + '&::before': { + content: '""', + height: '1px', + backgroundColor: 'var(--color-font)', + flexGrow: '1', + ...ultraFaint, + marginRight: '1rem', + }, + '&::after': { + content: '""', + height: '1px', + backgroundColor: 'var(--color-font)', + flexGrow: '1', + ...ultraFaint, + marginLeft: '1rem', + }, +}); + +const Title = styled.div({ + fontWeight: 'bold', +}); + +interface Props { + createRequestCollection: () => void; + createDesignDocument: () => void; + importFromFile: () => void; + importFromURL: () => void; + importFromClipboard: () => void; + importFromGit: () => void; +} + +export const WrapperHomeEmptyStatePane: FC = ({ createRequestCollection, createDesignDocument, importFromFile, importFromURL, importFromClipboard, importFromGit }) => { + return ( + + This is an empty project, to get started create your first resource: +
+
+ + +
+ or + + Import From + } + > + } + onClick={importFromFile} + > + File + + } + onClick={importFromURL} + > + URL + + } + onClick={importFromClipboard} + > + Clipboard + + } + onClick={importFromGit} + > + Git Clone + + +
+
+ ); +}; diff --git a/packages/insomnia/src/ui/components/wrapper-home.tsx b/packages/insomnia/src/ui/components/wrapper-home.tsx index 0db4fa0d63..3a5bf40355 100644 --- a/packages/insomnia/src/ui/components/wrapper-home.tsx +++ b/packages/insomnia/src/ui/components/wrapper-home.tsx @@ -41,6 +41,7 @@ import { RemoteWorkspacesDropdown } from './dropdowns/remote-workspaces-dropdown import { KeydownBinder } from './keydown-binder'; import { showPrompt } from './modals'; import { PageLayout } from './page-layout'; +import { WrapperHomeEmptyStatePane } from './panes/wrapper-home-empty-state-pane'; import { WorkspaceCard, WorkspaceCardProps } from './workspace-card'; const CreateButton = styled(Button)({ @@ -206,7 +207,7 @@ const WrapperHome: FC = (({ vcs }) => { handleCreateWorkspace({ scope: WorkspaceScopeKeys.collection, onCreate: async (workspace: Workspace) => { - // Don't mark for sync if not logged in at the time of creation + // Don't mark for sync if not logged in at the time of creation if (isLoggedIn && vcs && isRemoteProject(activeProject)) { await initializeLocalBackendProjectAndMarkForSync({ vcs: vcs.newInstance(), workspace }); } @@ -342,6 +343,16 @@ const WrapperHome: FC = (({ vcs }) => { No documents found for {filter}

)} + {!filter && !cards.length && ( + + )}