From 434e0208467a0a3208ef4225917f5b1c08a38732 Mon Sep 17 00:00:00 2001 From: Charles Bochet Date: Wed, 17 May 2023 22:31:16 +0200 Subject: [PATCH] Restructure project (#124) --- front/src/App.tsx | 6 +- front/src/__stories__/App.stories.tsx | 4 +- front/src/apollo.tsx | 2 +- front/src/components/auth/RequireAuth.tsx | 2 +- front/src/components/chips/PipeChip.tsx | 2 +- .../editable-cell/EditableCellWrapper.tsx | 2 +- .../editable-cell/EditableChip.tsx | 0 .../editable-cell/EditableDate.tsx | 4 +- .../editable-cell/EditableFullName.tsx | 2 +- .../editable-cell/EditablePhone.tsx | 2 +- .../editable-cell/EditableRelation.tsx | 7 +- .../editable-cell/EditableText.tsx | 0 .../__stories__/EditableChip.stories.tsx | 4 +- .../__stories__/EditableDate.stories.tsx | 2 +- .../__stories__/EditableFullName.stories.tsx | 2 +- .../__stories__/EditablePhone.stories.tsx | 2 +- .../__stories__/EditableRelation.stories.tsx | 10 +- .../__stories__/EditableText.stories.tsx | 2 +- .../__tests__/EditableChip.test.tsx | 2 +- .../__tests__/EditableDate.test.tsx | 0 .../__tests__/EditableFullName.test.tsx | 0 .../__tests__/EditablePhone.test.tsx | 0 .../__tests__/EditableRelation.test.tsx | 4 +- .../__tests__/EditableText.test.tsx | 0 front/src/components/table/ClickableCell.tsx | 55 -------- front/src/components/table/Table.tsx | 11 +- .../table-header/FilterDropdownButton.tsx | 6 +- .../table/table-header/SortAndFilterBar.tsx | 4 +- .../table/table-header/SortDropdownButton.tsx | 5 +- .../table/table-header/TableHeader.tsx | 23 ++-- .../FilterDropdownButton.stories.tsx | 9 +- .../__stories__/SortAndFilterBar.stories.tsx | 4 +- .../SortDropdownButton.stories.tsx | 2 +- .../__stories__/TableHeader.stories.tsx | 2 +- .../components/table/table-header/helpers.ts | 8 +- .../table/table-header/interface.ts | 124 ------------------ .../__tests__/company.interface.test.ts | 0 .../__tests__/person.interface.test.ts | 0 .../__tests__/user.interface.test.ts | 0 .../{ => entities}/company.interface.ts | 0 .../interfaces/entities/generic.interface.ts | 29 ++++ .../{ => entities}/person.interface.ts | 0 .../{ => entities}/pipe.interface.ts | 0 .../{ => entities}/user.interface.ts | 0 .../{ => entities}/workspace.interface.ts | 0 .../workspace_member.interface.ts | 0 front/src/interfaces/filters/interface.ts | 60 +++++++++ front/src/interfaces/search/interface.ts | 24 ++++ front/src/interfaces/sorts/interface.ts | 21 +++ front/src/layout/AppLayout.tsx | 2 +- front/src/layout/navbar/Navbar.tsx | 4 +- .../src/layout/navbar/WorkspaceContainer.tsx | 2 +- front/src/pages/auth/Callback.tsx | 2 +- front/src/pages/auth/Login.tsx | 2 +- front/src/pages/companies/Companies.tsx | 11 +- .../__stories__/Companies.stories.tsx | 6 +- .../companies/__tests__/Companies.test.tsx | 4 +- front/src/pages/companies/companies-table.tsx | 27 ++-- front/src/pages/people/People.tsx | 11 +- .../people/__stories__/People.stories.tsx | 4 +- .../pages/people/__tests__/People.test.tsx | 4 +- front/src/pages/people/people-table.tsx | 30 +++-- .../companies/__tests__/select.test.ts | 2 +- .../src/services/{ => api}/companies/index.ts | 0 .../services/{ => api}/companies/select.ts | 6 +- .../services/{ => api}/companies/update.ts | 7 +- .../{ => api}/people/__tests__/select.test.ts | 2 +- .../{ => api}/people/__tests__/update.test.ts | 8 +- front/src/services/{ => api}/people/index.ts | 0 front/src/services/{ => api}/people/select.ts | 6 +- front/src/services/{ => api}/people/update.ts | 7 +- .../search/__data__/mock-search-data.ts | 0 front/src/services/{ => api}/search/search.ts | 2 +- front/src/services/{ => api}/users/index.tsx | 2 +- front/src/services/{ => auth}/AuthService.ts | 0 .../{ => auth}/__tests__/AuthService.test.tsx | 0 76 files changed, 295 insertions(+), 304 deletions(-) rename front/src/components/{table => }/editable-cell/EditableCellWrapper.tsx (97%) rename front/src/components/{table => }/editable-cell/EditableChip.tsx (100%) rename front/src/components/{table => }/editable-cell/EditableDate.tsx (96%) rename front/src/components/{table => }/editable-cell/EditableFullName.tsx (97%) rename front/src/components/{table => }/editable-cell/EditablePhone.tsx (98%) rename front/src/components/{table => }/editable-cell/EditableRelation.tsx (96%) rename front/src/components/{table => }/editable-cell/EditableText.tsx (100%) rename front/src/components/{table => }/editable-cell/__stories__/EditableChip.stories.tsx (86%) rename front/src/components/{table => }/editable-cell/__stories__/EditableDate.stories.tsx (91%) rename front/src/components/{table => }/editable-cell/__stories__/EditableFullName.stories.tsx (93%) rename front/src/components/{table => }/editable-cell/__stories__/EditablePhone.stories.tsx (93%) rename front/src/components/{table => }/editable-cell/__stories__/EditableRelation.stories.tsx (87%) rename front/src/components/{table => }/editable-cell/__stories__/EditableText.stories.tsx (92%) rename front/src/components/{table => }/editable-cell/__tests__/EditableChip.test.tsx (94%) rename front/src/components/{table => }/editable-cell/__tests__/EditableDate.test.tsx (100%) rename front/src/components/{table => }/editable-cell/__tests__/EditableFullName.test.tsx (100%) rename front/src/components/{table => }/editable-cell/__tests__/EditablePhone.test.tsx (100%) rename front/src/components/{table => }/editable-cell/__tests__/EditableRelation.test.tsx (91%) rename front/src/components/{table => }/editable-cell/__tests__/EditableText.test.tsx (100%) delete mode 100644 front/src/components/table/ClickableCell.tsx delete mode 100644 front/src/components/table/table-header/interface.ts rename front/src/interfaces/{ => entities}/__tests__/company.interface.test.ts (100%) rename front/src/interfaces/{ => entities}/__tests__/person.interface.test.ts (100%) rename front/src/interfaces/{ => entities}/__tests__/user.interface.test.ts (100%) rename front/src/interfaces/{ => entities}/company.interface.ts (100%) create mode 100644 front/src/interfaces/entities/generic.interface.ts rename front/src/interfaces/{ => entities}/person.interface.ts (100%) rename front/src/interfaces/{ => entities}/pipe.interface.ts (100%) rename front/src/interfaces/{ => entities}/user.interface.ts (100%) rename front/src/interfaces/{ => entities}/workspace.interface.ts (100%) rename front/src/interfaces/{ => entities}/workspace_member.interface.ts (100%) create mode 100644 front/src/interfaces/filters/interface.ts create mode 100644 front/src/interfaces/search/interface.ts create mode 100644 front/src/interfaces/sorts/interface.ts rename front/src/services/{ => api}/companies/__tests__/select.test.ts (86%) rename front/src/services/{ => api}/companies/index.ts (100%) rename front/src/services/{ => api}/companies/select.ts (82%) rename front/src/services/{ => api}/companies/update.ts (94%) rename front/src/services/{ => api}/people/__tests__/select.test.ts (87%) rename front/src/services/{ => api}/people/__tests__/update.test.ts (83%) rename front/src/services/{ => api}/people/index.ts (100%) rename front/src/services/{ => api}/people/select.ts (83%) rename front/src/services/{ => api}/people/update.ts (94%) rename front/src/services/{ => api}/search/__data__/mock-search-data.ts (100%) rename front/src/services/{ => api}/search/search.ts (97%) rename front/src/services/{ => api}/users/index.tsx (88%) rename front/src/services/{ => auth}/AuthService.ts (100%) rename front/src/services/{ => auth}/__tests__/AuthService.test.tsx (100%) diff --git a/front/src/App.tsx b/front/src/App.tsx index 8c69ad7c2..378bd06e3 100644 --- a/front/src/App.tsx +++ b/front/src/App.tsx @@ -7,9 +7,9 @@ import AppLayout from './layout/AppLayout'; import { Routes, Route, Navigate } from 'react-router-dom'; import RequireAuth from './components/auth/RequireAuth'; import Opportunities from './pages/opportunities/Opportunities'; -import { User, mapToUser } from './interfaces/user.interface'; -import { useGetCurrentUserQuery } from './services/users'; -import { getUserIdFromToken } from './services/AuthService'; +import { User, mapToUser } from './interfaces/entities/user.interface'; +import { useGetCurrentUserQuery } from './services/api/users'; +import { getUserIdFromToken } from './services/auth/AuthService'; function App() { const [user, setUser] = useState(undefined); diff --git a/front/src/__stories__/App.stories.tsx b/front/src/__stories__/App.stories.tsx index f36c02834..28a039fd3 100644 --- a/front/src/__stories__/App.stories.tsx +++ b/front/src/__stories__/App.stories.tsx @@ -1,8 +1,8 @@ import { MockedProvider } from '@apollo/client/testing'; import App from '../App'; -import { GET_CURRENT_USER } from '../services/users'; +import { GET_CURRENT_USER } from '../services/api/users'; import { MemoryRouter } from 'react-router-dom'; -import { GET_PEOPLE } from '../services/people'; +import { GET_PEOPLE } from '../services/api/people'; const component = { title: 'App', diff --git a/front/src/apollo.tsx b/front/src/apollo.tsx index b6b9f5b06..63349f509 100644 --- a/front/src/apollo.tsx +++ b/front/src/apollo.tsx @@ -8,7 +8,7 @@ import { import { setContext } from '@apollo/client/link/context'; import { RestLink } from 'apollo-link-rest'; import { onError } from '@apollo/client/link/error'; -import { refreshAccessToken } from './services/AuthService'; +import { refreshAccessToken } from './services/auth/AuthService'; const apiLink = createHttpLink({ uri: `${process.env.REACT_APP_API_URL}/v1/graphql`, diff --git a/front/src/components/auth/RequireAuth.tsx b/front/src/components/auth/RequireAuth.tsx index befc53376..07001e584 100644 --- a/front/src/components/auth/RequireAuth.tsx +++ b/front/src/components/auth/RequireAuth.tsx @@ -1,6 +1,6 @@ import { useNavigate } from 'react-router-dom'; import { useEffect } from 'react'; -import { hasAccessToken } from '../../services/AuthService'; +import { hasAccessToken } from '../../services/auth/AuthService'; function RequireAuth({ children }: { children: JSX.Element }): JSX.Element { const navigate = useNavigate(); diff --git a/front/src/components/chips/PipeChip.tsx b/front/src/components/chips/PipeChip.tsx index a30651ae5..03c098821 100644 --- a/front/src/components/chips/PipeChip.tsx +++ b/front/src/components/chips/PipeChip.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import styled from '@emotion/styled'; -import { Pipe } from '../../interfaces/pipe.interface'; +import { Pipe } from '../../interfaces/entities/pipe.interface'; type OwnProps = { opportunity: Pipe; diff --git a/front/src/components/table/editable-cell/EditableCellWrapper.tsx b/front/src/components/editable-cell/EditableCellWrapper.tsx similarity index 97% rename from front/src/components/table/editable-cell/EditableCellWrapper.tsx rename to front/src/components/editable-cell/EditableCellWrapper.tsx index a5f0773db..3ccd309c0 100644 --- a/front/src/components/table/editable-cell/EditableCellWrapper.tsx +++ b/front/src/components/editable-cell/EditableCellWrapper.tsx @@ -1,6 +1,6 @@ import styled from '@emotion/styled'; import { ReactElement, useRef } from 'react'; -import { useOutsideAlerter } from '../../../hooks/useOutsideAlerter'; +import { useOutsideAlerter } from '../../hooks/useOutsideAlerter'; type OwnProps = { editModeContent: ReactElement; diff --git a/front/src/components/table/editable-cell/EditableChip.tsx b/front/src/components/editable-cell/EditableChip.tsx similarity index 100% rename from front/src/components/table/editable-cell/EditableChip.tsx rename to front/src/components/editable-cell/EditableChip.tsx diff --git a/front/src/components/table/editable-cell/EditableDate.tsx b/front/src/components/editable-cell/EditableDate.tsx similarity index 96% rename from front/src/components/table/editable-cell/EditableDate.tsx rename to front/src/components/editable-cell/EditableDate.tsx index 637979707..bb65a66f9 100644 --- a/front/src/components/table/editable-cell/EditableDate.tsx +++ b/front/src/components/editable-cell/EditableDate.tsx @@ -1,9 +1,9 @@ import styled from '@emotion/styled'; import { forwardRef, useState } from 'react'; import EditableCellWrapper from './EditableCellWrapper'; -import DatePicker from '../../form/DatePicker'; +import DatePicker from '../form/DatePicker'; import { CalendarContainer } from 'react-datepicker'; -import { modalBackground } from '../../../layout/styles/themes'; +import { modalBackground } from '../../layout/styles/themes'; export type EditableDateProps = { value: Date; diff --git a/front/src/components/table/editable-cell/EditableFullName.tsx b/front/src/components/editable-cell/EditableFullName.tsx similarity index 97% rename from front/src/components/table/editable-cell/EditableFullName.tsx rename to front/src/components/editable-cell/EditableFullName.tsx index 7b158fb68..ae1d92852 100644 --- a/front/src/components/table/editable-cell/EditableFullName.tsx +++ b/front/src/components/editable-cell/EditableFullName.tsx @@ -1,7 +1,7 @@ import styled from '@emotion/styled'; import { ChangeEvent, useRef, useState } from 'react'; import EditableCellWrapper from './EditableCellWrapper'; -import PersonChip from '../../chips/PersonChip'; +import PersonChip from '../chips/PersonChip'; type OwnProps = { firstname: string; diff --git a/front/src/components/table/editable-cell/EditablePhone.tsx b/front/src/components/editable-cell/EditablePhone.tsx similarity index 98% rename from front/src/components/table/editable-cell/EditablePhone.tsx rename to front/src/components/editable-cell/EditablePhone.tsx index a038e9be1..14fa51b31 100644 --- a/front/src/components/table/editable-cell/EditablePhone.tsx +++ b/front/src/components/editable-cell/EditablePhone.tsx @@ -2,7 +2,7 @@ import styled from '@emotion/styled'; import { ChangeEvent, MouseEvent, useRef, useState } from 'react'; import EditableCellWrapper from './EditableCellWrapper'; import { isValidPhoneNumber, parsePhoneNumber } from 'libphonenumber-js'; -import Link from '../../link/Link'; +import Link from '../link/Link'; type OwnProps = { placeholder?: string; diff --git a/front/src/components/table/editable-cell/EditableRelation.tsx b/front/src/components/editable-cell/EditableRelation.tsx similarity index 96% rename from front/src/components/table/editable-cell/EditableRelation.tsx rename to front/src/components/editable-cell/EditableRelation.tsx index a99ff61a3..95448d726 100644 --- a/front/src/components/table/editable-cell/EditableRelation.tsx +++ b/front/src/components/editable-cell/EditableRelation.tsx @@ -1,8 +1,11 @@ import { ChangeEvent, ComponentType, useState } from 'react'; import EditableCellWrapper from './EditableCellWrapper'; import styled from '@emotion/styled'; -import { useSearch } from '../../../services/search/search'; -import { SearchConfigType, SearchableType } from '../table-header/interface'; +import { useSearch } from '../../services/api/search/search'; +import { + SearchConfigType, + SearchableType, +} from '../../interfaces/search/interface'; const StyledEditModeContainer = styled.div` width: 200px; diff --git a/front/src/components/table/editable-cell/EditableText.tsx b/front/src/components/editable-cell/EditableText.tsx similarity index 100% rename from front/src/components/table/editable-cell/EditableText.tsx rename to front/src/components/editable-cell/EditableText.tsx diff --git a/front/src/components/table/editable-cell/__stories__/EditableChip.stories.tsx b/front/src/components/editable-cell/__stories__/EditableChip.stories.tsx similarity index 86% rename from front/src/components/table/editable-cell/__stories__/EditableChip.stories.tsx rename to front/src/components/editable-cell/__stories__/EditableChip.stories.tsx index bb051e07c..f819c5506 100644 --- a/front/src/components/table/editable-cell/__stories__/EditableChip.stories.tsx +++ b/front/src/components/editable-cell/__stories__/EditableChip.stories.tsx @@ -1,8 +1,8 @@ import EditableChip, { EditableChipProps } from '../EditableChip'; import { ThemeProvider } from '@emotion/react'; -import { lightTheme } from '../../../../layout/styles/themes'; +import { lightTheme } from '../../../layout/styles/themes'; import { StoryFn } from '@storybook/react'; -import CompanyChip from '../../../chips/CompanyChip'; +import CompanyChip from '../../chips/CompanyChip'; const component = { title: 'EditableChip', diff --git a/front/src/components/table/editable-cell/__stories__/EditableDate.stories.tsx b/front/src/components/editable-cell/__stories__/EditableDate.stories.tsx similarity index 91% rename from front/src/components/table/editable-cell/__stories__/EditableDate.stories.tsx rename to front/src/components/editable-cell/__stories__/EditableDate.stories.tsx index ae5dc6da5..1d04444c9 100644 --- a/front/src/components/table/editable-cell/__stories__/EditableDate.stories.tsx +++ b/front/src/components/editable-cell/__stories__/EditableDate.stories.tsx @@ -1,6 +1,6 @@ import EditableDate, { EditableDateProps } from '../EditableDate'; import { ThemeProvider } from '@emotion/react'; -import { lightTheme } from '../../../../layout/styles/themes'; +import { lightTheme } from '../../../layout/styles/themes'; import { StoryFn } from '@storybook/react'; const component = { diff --git a/front/src/components/table/editable-cell/__stories__/EditableFullName.stories.tsx b/front/src/components/editable-cell/__stories__/EditableFullName.stories.tsx similarity index 93% rename from front/src/components/table/editable-cell/__stories__/EditableFullName.stories.tsx rename to front/src/components/editable-cell/__stories__/EditableFullName.stories.tsx index ab92701ef..25091c941 100644 --- a/front/src/components/table/editable-cell/__stories__/EditableFullName.stories.tsx +++ b/front/src/components/editable-cell/__stories__/EditableFullName.stories.tsx @@ -1,6 +1,6 @@ import EditableFullName from '../EditableFullName'; import { ThemeProvider } from '@emotion/react'; -import { lightTheme } from '../../../../layout/styles/themes'; +import { lightTheme } from '../../../layout/styles/themes'; import { StoryFn } from '@storybook/react'; import { MemoryRouter } from 'react-router-dom'; diff --git a/front/src/components/table/editable-cell/__stories__/EditablePhone.stories.tsx b/front/src/components/editable-cell/__stories__/EditablePhone.stories.tsx similarity index 93% rename from front/src/components/table/editable-cell/__stories__/EditablePhone.stories.tsx rename to front/src/components/editable-cell/__stories__/EditablePhone.stories.tsx index fa388cb62..bd7750282 100644 --- a/front/src/components/table/editable-cell/__stories__/EditablePhone.stories.tsx +++ b/front/src/components/editable-cell/__stories__/EditablePhone.stories.tsx @@ -1,6 +1,6 @@ import EditablePhone from '../EditablePhone'; import { ThemeProvider } from '@emotion/react'; -import { lightTheme } from '../../../../layout/styles/themes'; +import { lightTheme } from '../../../layout/styles/themes'; import { StoryFn } from '@storybook/react'; import { MemoryRouter } from 'react-router-dom'; diff --git a/front/src/components/table/editable-cell/__stories__/EditableRelation.stories.tsx b/front/src/components/editable-cell/__stories__/EditableRelation.stories.tsx similarity index 87% rename from front/src/components/table/editable-cell/__stories__/EditableRelation.stories.tsx rename to front/src/components/editable-cell/__stories__/EditableRelation.stories.tsx index 6b57af71a..6b8ca5b96 100644 --- a/front/src/components/table/editable-cell/__stories__/EditableRelation.stories.tsx +++ b/front/src/components/editable-cell/__stories__/EditableRelation.stories.tsx @@ -1,16 +1,16 @@ import EditableRelation, { EditableRelationProps } from '../EditableRelation'; import { ThemeProvider } from '@emotion/react'; -import { lightTheme } from '../../../../layout/styles/themes'; +import { lightTheme } from '../../../layout/styles/themes'; import { StoryFn } from '@storybook/react'; -import CompanyChip, { CompanyChipPropsType } from '../../../chips/CompanyChip'; +import CompanyChip, { CompanyChipPropsType } from '../../chips/CompanyChip'; import { Company, mapToCompany, -} from '../../../../interfaces/company.interface'; +} from '../../../interfaces/entities/company.interface'; import { MockedProvider } from '@apollo/client/testing'; -import { SEARCH_COMPANY_QUERY } from '../../../../services/search/search'; +import { SEARCH_COMPANY_QUERY } from '../../../services/api/search/search'; import styled from '@emotion/styled'; -import { SearchConfigType } from '../../table-header/interface'; +import { SearchConfigType } from '../../../interfaces/search/interface'; const component = { title: 'editable-cell/EditableRelation', diff --git a/front/src/components/table/editable-cell/__stories__/EditableText.stories.tsx b/front/src/components/editable-cell/__stories__/EditableText.stories.tsx similarity index 92% rename from front/src/components/table/editable-cell/__stories__/EditableText.stories.tsx rename to front/src/components/editable-cell/__stories__/EditableText.stories.tsx index a526b4cc5..41523f5f9 100644 --- a/front/src/components/table/editable-cell/__stories__/EditableText.stories.tsx +++ b/front/src/components/editable-cell/__stories__/EditableText.stories.tsx @@ -1,6 +1,6 @@ import EditableText from '../EditableText'; import { ThemeProvider } from '@emotion/react'; -import { lightTheme } from '../../../../layout/styles/themes'; +import { lightTheme } from '../../../layout/styles/themes'; import { StoryFn } from '@storybook/react'; const component = { diff --git a/front/src/components/table/editable-cell/__tests__/EditableChip.test.tsx b/front/src/components/editable-cell/__tests__/EditableChip.test.tsx similarity index 94% rename from front/src/components/table/editable-cell/__tests__/EditableChip.test.tsx rename to front/src/components/editable-cell/__tests__/EditableChip.test.tsx index 1649aca74..ed6c56257 100644 --- a/front/src/components/table/editable-cell/__tests__/EditableChip.test.tsx +++ b/front/src/components/editable-cell/__tests__/EditableChip.test.tsx @@ -1,7 +1,7 @@ import { fireEvent, render } from '@testing-library/react'; import { EditableChipStory } from '../__stories__/EditableChip.stories'; -import CompanyChip from '../../../chips/CompanyChip'; +import CompanyChip from '../../chips/CompanyChip'; it('Checks the EditableChip editing event bubbles up', async () => { const func = jest.fn(() => null); diff --git a/front/src/components/table/editable-cell/__tests__/EditableDate.test.tsx b/front/src/components/editable-cell/__tests__/EditableDate.test.tsx similarity index 100% rename from front/src/components/table/editable-cell/__tests__/EditableDate.test.tsx rename to front/src/components/editable-cell/__tests__/EditableDate.test.tsx diff --git a/front/src/components/table/editable-cell/__tests__/EditableFullName.test.tsx b/front/src/components/editable-cell/__tests__/EditableFullName.test.tsx similarity index 100% rename from front/src/components/table/editable-cell/__tests__/EditableFullName.test.tsx rename to front/src/components/editable-cell/__tests__/EditableFullName.test.tsx diff --git a/front/src/components/table/editable-cell/__tests__/EditablePhone.test.tsx b/front/src/components/editable-cell/__tests__/EditablePhone.test.tsx similarity index 100% rename from front/src/components/table/editable-cell/__tests__/EditablePhone.test.tsx rename to front/src/components/editable-cell/__tests__/EditablePhone.test.tsx diff --git a/front/src/components/table/editable-cell/__tests__/EditableRelation.test.tsx b/front/src/components/editable-cell/__tests__/EditableRelation.test.tsx similarity index 91% rename from front/src/components/table/editable-cell/__tests__/EditableRelation.test.tsx rename to front/src/components/editable-cell/__tests__/EditableRelation.test.tsx index 3537ad3d7..7fbc72ee8 100644 --- a/front/src/components/table/editable-cell/__tests__/EditableRelation.test.tsx +++ b/front/src/components/editable-cell/__tests__/EditableRelation.test.tsx @@ -1,11 +1,11 @@ import { fireEvent, render, waitFor } from '@testing-library/react'; import { EditableRelationStory } from '../__stories__/EditableRelation.stories'; -import { CompanyChipPropsType } from '../../../chips/CompanyChip'; +import { CompanyChipPropsType } from '../../chips/CompanyChip'; import { EditableRelationProps } from '../EditableRelation'; import { act } from 'react-dom/test-utils'; -import { Company } from '../../../../interfaces/company.interface'; +import { Company } from '../../../interfaces/company.interface'; it('Checks the EditableRelation editing event bubbles up', async () => { const func = jest.fn(() => null); diff --git a/front/src/components/table/editable-cell/__tests__/EditableText.test.tsx b/front/src/components/editable-cell/__tests__/EditableText.test.tsx similarity index 100% rename from front/src/components/table/editable-cell/__tests__/EditableText.test.tsx rename to front/src/components/editable-cell/__tests__/EditableText.test.tsx diff --git a/front/src/components/table/ClickableCell.tsx b/front/src/components/table/ClickableCell.tsx deleted file mode 100644 index ddd382075..000000000 --- a/front/src/components/table/ClickableCell.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import styled from '@emotion/styled'; -import * as React from 'react'; -import { Link } from 'react-router-dom'; - -type OwnProps = { - href: string; - children?: React.ReactNode; -}; - -const StyledClickable = styled.div` - position: relative; - box-sizing: border-box; - height: 32px; - display: flex; - align-items: center; - - ::before { - content: ''; - position: absolute; - top: -1px; - left: -1px; - width: calc(100% + 2px); - height: calc(100% + 2px); - border: 1px solid ${(props) => props.theme.text20}; - box-sizing: border-box; - border-radius: 4px; - pointer-events: none; - display: none; - } - - :hover::before { - display: block; - } - - a { - color: inherit; - text-decoration: none; - } -`; - -const Container = styled.span` - padding-left: ${(props) => props.theme.spacing(2)}; -`; - -function ClickableCell({ href, children }: OwnProps) { - return ( - - - {children} - - - ); -} - -export default ClickableCell; diff --git a/front/src/components/table/Table.tsx b/front/src/components/table/Table.tsx index fc201a592..061c8c25c 100644 --- a/front/src/components/table/Table.tsx +++ b/front/src/components/table/Table.tsx @@ -10,12 +10,13 @@ import TableHeader from './table-header/TableHeader'; import styled from '@emotion/styled'; import { FilterConfigType, - SearchConfigType, - SearchableType, SelectedFilterType, - SelectedSortType, - SortType, -} from './table-header/interface'; +} from '../../interfaces/filters/interface'; +import { + SearchableType, + SearchConfigType, +} from '../../interfaces/search/interface'; +import { SortType, SelectedSortType } from '../../interfaces/sorts/interface'; declare module 'react' { function forwardRef( diff --git a/front/src/components/table/table-header/FilterDropdownButton.tsx b/front/src/components/table/table-header/FilterDropdownButton.tsx index a36040d21..314c579fd 100644 --- a/front/src/components/table/table-header/FilterDropdownButton.tsx +++ b/front/src/components/table/table-header/FilterDropdownButton.tsx @@ -4,10 +4,12 @@ import { FilterConfigType, FilterOperandType, FilterableFieldsType, + SelectedFilterType, +} from '../../../interfaces/filters/interface'; +import { SearchConfigType, SearchableType, - SelectedFilterType, -} from './interface'; +} from '../../../interfaces/search/interface'; type OwnProps = { isFilterSelected: boolean; diff --git a/front/src/components/table/table-header/SortAndFilterBar.tsx b/front/src/components/table/table-header/SortAndFilterBar.tsx index 126a15e6b..b35bb2e41 100644 --- a/front/src/components/table/table-header/SortAndFilterBar.tsx +++ b/front/src/components/table/table-header/SortAndFilterBar.tsx @@ -4,8 +4,8 @@ import { FaArrowDown, FaArrowUp } from 'react-icons/fa'; import { FilterableFieldsType, SelectedFilterType, - SelectedSortType, -} from './interface'; +} from '../../../interfaces/filters/interface'; +import { SelectedSortType } from '../../../interfaces/sorts/interface'; type OwnProps = { sorts: Array>; diff --git a/front/src/components/table/table-header/SortDropdownButton.tsx b/front/src/components/table/table-header/SortDropdownButton.tsx index b6459e40f..b025561c5 100644 --- a/front/src/components/table/table-header/SortDropdownButton.tsx +++ b/front/src/components/table/table-header/SortDropdownButton.tsx @@ -1,6 +1,9 @@ import { useCallback, useState } from 'react'; import DropdownButton from './DropdownButton'; -import { SelectedSortType, SortType } from './interface'; +import { + SelectedSortType, + SortType, +} from '../../../interfaces/sorts/interface'; type OwnProps = { isSortSelected: boolean; diff --git a/front/src/components/table/table-header/TableHeader.tsx b/front/src/components/table/table-header/TableHeader.tsx index ab14e3902..38b00aa87 100644 --- a/front/src/components/table/table-header/TableHeader.tsx +++ b/front/src/components/table/table-header/TableHeader.tsx @@ -1,17 +1,22 @@ import styled from '@emotion/styled'; -import { - FilterConfigType, - FilterableFieldsType, - SearchConfigType, - SearchableType, - SelectedFilterType, - SelectedSortType, - SortType, -} from './interface'; + import { ReactNode, useCallback, useState } from 'react'; import { SortDropdownButton } from './SortDropdownButton'; import { FilterDropdownButton } from './FilterDropdownButton'; import SortAndFilterBar from './SortAndFilterBar'; +import { + FilterableFieldsType, + FilterConfigType, + SelectedFilterType, +} from '../../../interfaces/filters/interface'; +import { + SearchableType, + SearchConfigType, +} from '../../../interfaces/search/interface'; +import { + SortType, + SelectedSortType, +} from '../../../interfaces/sorts/interface'; type OwnProps = { viewName: string; diff --git a/front/src/components/table/table-header/__stories__/FilterDropdownButton.stories.tsx b/front/src/components/table/table-header/__stories__/FilterDropdownButton.stories.tsx index 3b74ae95f..d570d448b 100644 --- a/front/src/components/table/table-header/__stories__/FilterDropdownButton.stories.tsx +++ b/front/src/components/table/table-header/__stories__/FilterDropdownButton.stories.tsx @@ -2,16 +2,19 @@ import { ThemeProvider } from '@emotion/react'; import { lightTheme } from '../../../../layout/styles/themes'; import { FilterDropdownButton } from '../FilterDropdownButton'; import styled from '@emotion/styled'; -import { FilterableFieldsType, SelectedFilterType } from '../interface'; import { useCallback, useState } from 'react'; import { SEARCH_PEOPLE_QUERY, useSearch, -} from '../../../../services/search/search'; +} from '../../../../services/api/search/search'; import { MockedProvider } from '@apollo/client/testing'; import { mockData } from '../../../../pages/people/__tests__/__data__/mock-data'; import { availableFilters } from '../../../../pages/people/people-table'; -import { Person } from '../../../../interfaces/person.interface'; +import { Person } from '../../../../interfaces/entities/person.interface'; +import { + FilterableFieldsType, + SelectedFilterType, +} from '../../../../interfaces/filters/interface'; const component = { title: 'FilterDropdownButton', diff --git a/front/src/components/table/table-header/__stories__/SortAndFilterBar.stories.tsx b/front/src/components/table/table-header/__stories__/SortAndFilterBar.stories.tsx index c89323c48..017597a05 100644 --- a/front/src/components/table/table-header/__stories__/SortAndFilterBar.stories.tsx +++ b/front/src/components/table/table-header/__stories__/SortAndFilterBar.stories.tsx @@ -2,8 +2,8 @@ import SortAndFilterBar from '../SortAndFilterBar'; import { ThemeProvider } from '@emotion/react'; import { lightTheme } from '../../../../layout/styles/themes'; import { FaArrowDown } from 'react-icons/fa'; -import { SelectedFilterType } from '../interface'; -import { Person } from '../../../../interfaces/person.interface'; +import { Person } from '../../../../interfaces/entities/person.interface'; +import { SelectedFilterType } from '../../../../interfaces/filters/interface'; const component = { title: 'SortAndFilterBar', diff --git a/front/src/components/table/table-header/__stories__/SortDropdownButton.stories.tsx b/front/src/components/table/table-header/__stories__/SortDropdownButton.stories.tsx index fe3a83846..a5abca171 100644 --- a/front/src/components/table/table-header/__stories__/SortDropdownButton.stories.tsx +++ b/front/src/components/table/table-header/__stories__/SortDropdownButton.stories.tsx @@ -1,4 +1,3 @@ -import { SortType } from '../interface'; import { ThemeProvider } from '@emotion/react'; import { lightTheme } from '../../../../layout/styles/themes'; import { @@ -12,6 +11,7 @@ import { import { SortDropdownButton } from '../SortDropdownButton'; import styled from '@emotion/styled'; import { Order_By, People_Order_By } from '../../../../generated/graphql'; +import { SortType } from '../../../../interfaces/sorts/interface'; const component = { title: 'SortDropdownButton', diff --git a/front/src/components/table/table-header/__stories__/TableHeader.stories.tsx b/front/src/components/table/table-header/__stories__/TableHeader.stories.tsx index ba1ddd5b9..891604ad1 100644 --- a/front/src/components/table/table-header/__stories__/TableHeader.stories.tsx +++ b/front/src/components/table/table-header/__stories__/TableHeader.stories.tsx @@ -2,7 +2,7 @@ import TableHeader from '../TableHeader'; import { ThemeProvider } from '@emotion/react'; import { lightTheme } from '../../../../layout/styles/themes'; import { FaRegBuilding, FaCalendar } from 'react-icons/fa'; -import { SortType } from '../interface'; +import { SortType } from '../../../../interfaces/sorts/interface'; const component = { title: 'TableHeader', diff --git a/front/src/components/table/table-header/helpers.ts b/front/src/components/table/table-header/helpers.ts index f135536a9..974aa0a7b 100644 --- a/front/src/components/table/table-header/helpers.ts +++ b/front/src/components/table/table-header/helpers.ts @@ -1,11 +1,11 @@ import { Order_By } from '../../../generated/graphql'; +import { BoolExpType } from '../../../interfaces/entities/generic.interface'; import { - BoolExpType, - FilterWhereType, FilterableFieldsType, + FilterWhereType, SelectedFilterType, - SelectedSortType, -} from './interface'; +} from '../../../interfaces/filters/interface'; +import { SelectedSortType } from '../../../interfaces/sorts/interface'; export const reduceFiltersToWhere = < ValueType extends FilterableFieldsType, diff --git a/front/src/components/table/table-header/interface.ts b/front/src/components/table/table-header/interface.ts deleted file mode 100644 index 3f008de45..000000000 --- a/front/src/components/table/table-header/interface.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { DocumentNode } from 'graphql'; -import { ReactNode } from 'react'; -import { - Companies_Bool_Exp, - Order_By, - People_Bool_Exp, - Users_Bool_Exp, -} from '../../../generated/graphql'; -import { - Company, - GraphqlQueryCompany, -} from '../../../interfaces/company.interface'; -import { - GraphqlQueryPerson, - Person, -} from '../../../interfaces/person.interface'; -import { GraphqlQueryUser, User } from '../../../interfaces/user.interface'; - -export type SortType = - | { - _type: 'default_sort'; - label: string; - key: keyof OrderByTemplate & string; - icon?: ReactNode; - } - | { - _type: 'custom_sort'; - label: string; - key: string; - icon?: ReactNode; - orderByTemplate: (order: Order_By) => OrderByTemplate; - }; - -export type SelectedSortType = SortType & { - order: 'asc' | 'desc'; -}; - -type AnyEntity = { - id: string; - __typename: string; -} & Record; - -export type FilterableFieldsType = Person | Company; -export type FilterWhereType = Person | Company | User | AnyEntity; - -type FilterConfigGqlType = WhereType extends Company - ? GraphqlQueryCompany - : WhereType extends Person - ? GraphqlQueryPerson - : WhereType extends User - ? GraphqlQueryUser - : never; - -export type BoolExpType = T extends Company - ? Companies_Bool_Exp - : T extends Person - ? People_Bool_Exp - : T extends User - ? Users_Bool_Exp - : never; - -export type FilterConfigType< - FilteredType extends FilterableFieldsType, - WhereType extends FilterWhereType = any, -> = { - key: string; - label: string; - icon: ReactNode; - operands: FilterOperandType[]; - searchConfig: WhereType extends SearchableType - ? SearchConfigType - : null; - selectedValueRender: (selected: WhereType) => string; -}; - -export type SearchableType = Person | Company | User; - -export type SearchConfigType = { - query: DocumentNode; - template: ( - searchInput: string, - ) => People_Bool_Exp | Companies_Bool_Exp | Users_Bool_Exp; - resultMapper: (data: FilterConfigGqlType) => { - value: SearchType; - render: (value: SearchType) => ReactNode; - }; -}; - -export type FilterOperandType< - FilteredType extends FilterableFieldsType, - WhereType extends FilterWhereType = AnyEntity, -> = - | FilterOperandExactMatchType - | FilterOperandComparativeType; - -type FilterOperandExactMatchType< - FilteredType extends FilterableFieldsType, - WhereType extends FilterWhereType, -> = { - label: 'Equal' | 'Not equal'; - id: 'equal' | 'not-equal'; - whereTemplate: (value: WhereType) => BoolExpType; -}; - -type FilterOperandComparativeType< - FilteredType extends FilterableFieldsType, - WhereType extends FilterWhereType, -> = { - label: 'Like' | 'Not like' | 'Include'; - id: 'like' | 'not_like' | 'include'; - whereTemplate: (value: WhereType) => BoolExpType; -}; - -export type SelectedFilterType< - FilteredType extends FilterableFieldsType, - WhereType extends FilterWhereType = AnyEntity, -> = { - key: string; - value: WhereType; - displayValue: string; - label: string; - icon: ReactNode; - operand: FilterOperandType; -}; diff --git a/front/src/interfaces/__tests__/company.interface.test.ts b/front/src/interfaces/entities/__tests__/company.interface.test.ts similarity index 100% rename from front/src/interfaces/__tests__/company.interface.test.ts rename to front/src/interfaces/entities/__tests__/company.interface.test.ts diff --git a/front/src/interfaces/__tests__/person.interface.test.ts b/front/src/interfaces/entities/__tests__/person.interface.test.ts similarity index 100% rename from front/src/interfaces/__tests__/person.interface.test.ts rename to front/src/interfaces/entities/__tests__/person.interface.test.ts diff --git a/front/src/interfaces/__tests__/user.interface.test.ts b/front/src/interfaces/entities/__tests__/user.interface.test.ts similarity index 100% rename from front/src/interfaces/__tests__/user.interface.test.ts rename to front/src/interfaces/entities/__tests__/user.interface.test.ts diff --git a/front/src/interfaces/company.interface.ts b/front/src/interfaces/entities/company.interface.ts similarity index 100% rename from front/src/interfaces/company.interface.ts rename to front/src/interfaces/entities/company.interface.ts diff --git a/front/src/interfaces/entities/generic.interface.ts b/front/src/interfaces/entities/generic.interface.ts new file mode 100644 index 000000000..dce737770 --- /dev/null +++ b/front/src/interfaces/entities/generic.interface.ts @@ -0,0 +1,29 @@ +import { + Companies_Bool_Exp, + People_Bool_Exp, + Users_Bool_Exp, +} from '../../generated/graphql'; +import { Company, GraphqlQueryCompany } from './company.interface'; +import { GraphqlQueryPerson, Person } from './person.interface'; +import { GraphqlQueryUser, User } from './user.interface'; + +export type AnyEntity = { + id: string; + __typename: string; +} & Record; + +export type GqlType = T extends Company + ? GraphqlQueryCompany + : T extends Person + ? GraphqlQueryPerson + : T extends User + ? GraphqlQueryUser + : never; + +export type BoolExpType = T extends Company + ? Companies_Bool_Exp + : T extends Person + ? People_Bool_Exp + : T extends User + ? Users_Bool_Exp + : never; diff --git a/front/src/interfaces/person.interface.ts b/front/src/interfaces/entities/person.interface.ts similarity index 100% rename from front/src/interfaces/person.interface.ts rename to front/src/interfaces/entities/person.interface.ts diff --git a/front/src/interfaces/pipe.interface.ts b/front/src/interfaces/entities/pipe.interface.ts similarity index 100% rename from front/src/interfaces/pipe.interface.ts rename to front/src/interfaces/entities/pipe.interface.ts diff --git a/front/src/interfaces/user.interface.ts b/front/src/interfaces/entities/user.interface.ts similarity index 100% rename from front/src/interfaces/user.interface.ts rename to front/src/interfaces/entities/user.interface.ts diff --git a/front/src/interfaces/workspace.interface.ts b/front/src/interfaces/entities/workspace.interface.ts similarity index 100% rename from front/src/interfaces/workspace.interface.ts rename to front/src/interfaces/entities/workspace.interface.ts diff --git a/front/src/interfaces/workspace_member.interface.ts b/front/src/interfaces/entities/workspace_member.interface.ts similarity index 100% rename from front/src/interfaces/workspace_member.interface.ts rename to front/src/interfaces/entities/workspace_member.interface.ts diff --git a/front/src/interfaces/filters/interface.ts b/front/src/interfaces/filters/interface.ts new file mode 100644 index 000000000..c7f683f0a --- /dev/null +++ b/front/src/interfaces/filters/interface.ts @@ -0,0 +1,60 @@ +import { ReactNode } from 'react'; +import { SearchConfigType, SearchableType } from '../search/interface'; +import { Person } from '../entities/person.interface'; +import { Company } from '../entities/company.interface'; +import { User } from '../entities/user.interface'; +import { AnyEntity, BoolExpType } from '../entities/generic.interface'; + +export type FilterableFieldsType = Person | Company; +export type FilterWhereType = Person | Company | User | AnyEntity; + +export type FilterConfigType< + FilteredType extends FilterableFieldsType, + WhereType extends FilterWhereType = any, +> = { + key: string; + label: string; + icon: ReactNode; + operands: FilterOperandType[]; + searchConfig: WhereType extends SearchableType + ? SearchConfigType + : null; + selectedValueRender: (selected: WhereType) => string; +}; + +export type FilterOperandType< + FilteredType extends FilterableFieldsType, + WhereType extends FilterWhereType = AnyEntity, +> = + | FilterOperandExactMatchType + | FilterOperandComparativeType; + +type FilterOperandExactMatchType< + FilteredType extends FilterableFieldsType, + WhereType extends FilterWhereType, +> = { + label: 'Equal' | 'Not equal'; + id: 'equal' | 'not-equal'; + whereTemplate: (value: WhereType) => BoolExpType; +}; + +type FilterOperandComparativeType< + FilteredType extends FilterableFieldsType, + WhereType extends FilterWhereType, +> = { + label: 'Like' | 'Not like' | 'Include'; + id: 'like' | 'not_like' | 'include'; + whereTemplate: (value: WhereType) => BoolExpType; +}; + +export type SelectedFilterType< + FilteredType extends FilterableFieldsType, + WhereType extends FilterWhereType = AnyEntity, +> = { + key: string; + value: WhereType; + displayValue: string; + label: string; + icon: ReactNode; + operand: FilterOperandType; +}; diff --git a/front/src/interfaces/search/interface.ts b/front/src/interfaces/search/interface.ts new file mode 100644 index 000000000..4f58e304d --- /dev/null +++ b/front/src/interfaces/search/interface.ts @@ -0,0 +1,24 @@ +import { DocumentNode } from 'graphql'; +import { ReactNode } from 'react'; +import { + Companies_Bool_Exp, + People_Bool_Exp, + Users_Bool_Exp, +} from '../../generated/graphql'; +import { Person } from '../entities/person.interface'; +import { Company } from '../entities/company.interface'; +import { User } from '../entities/user.interface'; +import { GqlType } from '../entities/generic.interface'; + +export type SearchableType = Person | Company | User; + +export type SearchConfigType = { + query: DocumentNode; + template: ( + searchInput: string, + ) => People_Bool_Exp | Companies_Bool_Exp | Users_Bool_Exp; + resultMapper: (data: GqlType) => { + value: SearchType; + render: (value: SearchType) => ReactNode; + }; +}; diff --git a/front/src/interfaces/sorts/interface.ts b/front/src/interfaces/sorts/interface.ts new file mode 100644 index 000000000..c4c1f05c3 --- /dev/null +++ b/front/src/interfaces/sorts/interface.ts @@ -0,0 +1,21 @@ +import { ReactNode } from 'react'; +import { Order_By } from '../../generated/graphql'; + +export type SortType = + | { + _type: 'default_sort'; + label: string; + key: keyof OrderByTemplate & string; + icon?: ReactNode; + } + | { + _type: 'custom_sort'; + label: string; + key: string; + icon?: ReactNode; + orderByTemplate: (order: Order_By) => OrderByTemplate; + }; + +export type SelectedSortType = SortType & { + order: 'asc' | 'desc'; +}; diff --git a/front/src/layout/AppLayout.tsx b/front/src/layout/AppLayout.tsx index 90b62d2e8..2bf7c7b39 100644 --- a/front/src/layout/AppLayout.tsx +++ b/front/src/layout/AppLayout.tsx @@ -1,7 +1,7 @@ import Navbar from './navbar/Navbar'; import styled from '@emotion/styled'; import { ThemeProvider } from '@emotion/react'; -import { User } from '../interfaces/user.interface'; +import { User } from '../interfaces/entities/user.interface'; import { lightTheme } from './styles/themes'; const StyledLayout = styled.div` diff --git a/front/src/layout/navbar/Navbar.tsx b/front/src/layout/navbar/Navbar.tsx index fbcf3e7d4..1e865f533 100644 --- a/front/src/layout/navbar/Navbar.tsx +++ b/front/src/layout/navbar/Navbar.tsx @@ -1,7 +1,7 @@ import styled from '@emotion/styled'; import { useMatch, useResolvedPath } from 'react-router-dom'; -import { User } from '../../interfaces/user.interface'; -import { Workspace } from '../../interfaces/workspace.interface'; +import { User } from '../../interfaces/entities/user.interface'; +import { Workspace } from '../../interfaces/entities/workspace.interface'; import NavItem from './NavItem'; import NavTitle from './NavTitle'; import WorkspaceContainer from './WorkspaceContainer'; diff --git a/front/src/layout/navbar/WorkspaceContainer.tsx b/front/src/layout/navbar/WorkspaceContainer.tsx index cf1cef5bc..de9f5ee54 100644 --- a/front/src/layout/navbar/WorkspaceContainer.tsx +++ b/front/src/layout/navbar/WorkspaceContainer.tsx @@ -1,5 +1,5 @@ import styled from '@emotion/styled'; -import { Workspace } from '../../interfaces/workspace.interface'; +import { Workspace } from '../../interfaces/entities/workspace.interface'; type OwnProps = { workspace: Workspace; diff --git a/front/src/pages/auth/Callback.tsx b/front/src/pages/auth/Callback.tsx index 6f571dc7a..50815bfb6 100644 --- a/front/src/pages/auth/Callback.tsx +++ b/front/src/pages/auth/Callback.tsx @@ -1,6 +1,6 @@ import { useSearchParams, useNavigate } from 'react-router-dom'; import { useEffect, useState } from 'react'; -import { refreshAccessToken } from '../../services/AuthService'; +import { refreshAccessToken } from '../../services/auth/AuthService'; function Callback() { const [searchParams] = useSearchParams(); diff --git a/front/src/pages/auth/Login.tsx b/front/src/pages/auth/Login.tsx index 37e577de4..d51e54090 100644 --- a/front/src/pages/auth/Login.tsx +++ b/front/src/pages/auth/Login.tsx @@ -1,6 +1,6 @@ import { useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; -import { hasAccessToken } from '../../services/AuthService'; +import { hasAccessToken } from '../../services/auth/AuthService'; function Login() { const navigate = useNavigate(); diff --git a/front/src/pages/companies/Companies.tsx b/front/src/pages/companies/Companies.tsx index c4977dd3b..0c2a87831 100644 --- a/front/src/pages/companies/Companies.tsx +++ b/front/src/pages/companies/Companies.tsx @@ -9,9 +9,12 @@ import { deleteCompanies, insertCompany, useCompaniesQuery, -} from '../../services/companies'; +} from '../../services/api/companies'; import Table from '../../components/table/Table'; -import { Company, mapToCompany } from '../../interfaces/company.interface'; +import { + Company, + mapToCompany, +} from '../../interfaces/entities/company.interface'; import { useCompaniesColumns, availableFilters, @@ -25,9 +28,9 @@ import { Companies_Bool_Exp, Companies_Order_By, } from '../../generated/graphql'; -import { SelectedFilterType } from '../../components/table/table-header/interface'; -import { useSearch } from '../../services/search/search'; +import { useSearch } from '../../services/api/search/search'; import ActionBar from '../../components/table/action-bar/ActionBar'; +import { SelectedFilterType } from '../../interfaces/filters/interface'; const StyledCompaniesContainer = styled.div` display: flex; diff --git a/front/src/pages/companies/__stories__/Companies.stories.tsx b/front/src/pages/companies/__stories__/Companies.stories.tsx index 13b72ce05..a10eb1bae 100644 --- a/front/src/pages/companies/__stories__/Companies.stories.tsx +++ b/front/src/pages/companies/__stories__/Companies.stories.tsx @@ -2,11 +2,11 @@ import { MemoryRouter } from 'react-router-dom'; import Companies from '../Companies'; import { ThemeProvider } from '@emotion/react'; import { lightTheme } from '../../../layout/styles/themes'; -import { GET_COMPANIES } from '../../../services/companies'; +import { GET_COMPANIES } from '../../../services/api/companies'; import { mockData } from '../__tests__/__data__/mock-data'; import { MockedProvider } from '@apollo/client/testing'; -import { SEARCH_COMPANY_QUERY } from '../../../services/search/search'; -import { mockCompanySearchData } from '../../../services/search/__data__/mock-search-data'; +import { SEARCH_COMPANY_QUERY } from '../../../services/api/search/search'; +import { mockCompanySearchData } from '../../../services/api/search/__data__/mock-search-data'; const component = { title: 'Companies', diff --git a/front/src/pages/companies/__tests__/Companies.test.tsx b/front/src/pages/companies/__tests__/Companies.test.tsx index f401698fe..ee4b38395 100644 --- a/front/src/pages/companies/__tests__/Companies.test.tsx +++ b/front/src/pages/companies/__tests__/Companies.test.tsx @@ -5,11 +5,11 @@ import { act } from 'react-dom/test-utils'; import { GraphqlMutationCompany, GraphqlQueryCompany, -} from '../../../interfaces/company.interface'; +} from '../../../interfaces/entities/company.interface'; jest.mock('../../../apollo', () => { const companyInterface = jest.requireActual( - '../../../interfaces/company.interface', + '../../../interfaces/entities/company.interface', ); return { apiClient: { diff --git a/front/src/pages/companies/companies-table.tsx b/front/src/pages/companies/companies-table.tsx index 95e00c157..398604d86 100644 --- a/front/src/pages/companies/companies-table.tsx +++ b/front/src/pages/companies/companies-table.tsx @@ -1,9 +1,12 @@ import { CellContext, createColumnHelper } from '@tanstack/react-table'; -import { Company, mapToCompany } from '../../interfaces/company.interface'; -import { updateCompany } from '../../services/companies'; +import { + Company, + mapToCompany, +} from '../../interfaces/entities/company.interface'; +import { updateCompany } from '../../services/api/companies'; import ColumnHead from '../../components/table/ColumnHead'; import CompanyChip from '../../components/chips/CompanyChip'; -import EditableText from '../../components/table/editable-cell/EditableText'; +import EditableText from '../../components/editable-cell/EditableText'; import { FaRegBuilding, FaCalendar, @@ -16,23 +19,21 @@ import { import PersonChip, { PersonChipPropsType, } from '../../components/chips/PersonChip'; -import EditableChip from '../../components/table/editable-cell/EditableChip'; -import { - FilterConfigType, - SearchConfigType, - SortType, -} from '../../components/table/table-header/interface'; +import EditableChip from '../../components/editable-cell/EditableChip'; import { Companies_Order_By } from '../../generated/graphql'; import { SEARCH_COMPANY_QUERY, SEARCH_USER_QUERY, -} from '../../services/search/search'; -import EditableDate from '../../components/table/editable-cell/EditableDate'; -import EditableRelation from '../../components/table/editable-cell/EditableRelation'; -import { User, mapToUser } from '../../interfaces/user.interface'; +} from '../../services/api/search/search'; +import EditableDate from '../../components/editable-cell/EditableDate'; +import EditableRelation from '../../components/editable-cell/EditableRelation'; +import { User, mapToUser } from '../../interfaces/entities/user.interface'; import { useMemo } from 'react'; import { SelectAllCheckbox } from '../../components/table/SelectAllCheckbox'; import Checkbox from '../../components/form/Checkbox'; +import { SortType } from '../../interfaces/sorts/interface'; +import { FilterConfigType } from '../../interfaces/filters/interface'; +import { SearchConfigType } from '../../interfaces/search/interface'; export const availableSorts = [ { diff --git a/front/src/pages/people/People.tsx b/front/src/pages/people/People.tsx index 441de17de..9121170b3 100644 --- a/front/src/pages/people/People.tsx +++ b/front/src/pages/people/People.tsx @@ -8,7 +8,10 @@ import { availableSorts, usePeopleColumns, } from './people-table'; -import { Person, mapToPerson } from '../../interfaces/person.interface'; +import { + Person, + mapToPerson, +} from '../../interfaces/entities/person.interface'; import { useCallback, useEffect, useRef, useState } from 'react'; import { PeopleSelectedSortType, @@ -16,15 +19,15 @@ import { deletePeople, insertPerson, usePeopleQuery, -} from '../../services/people'; -import { useSearch } from '../../services/search/search'; +} from '../../services/api/people'; +import { useSearch } from '../../services/api/search/search'; import { People_Bool_Exp } from '../../generated/graphql'; -import { SelectedFilterType } from '../../components/table/table-header/interface'; import { reduceFiltersToWhere, reduceSortsToOrderBy, } from '../../components/table/table-header/helpers'; import ActionBar from '../../components/table/action-bar/ActionBar'; +import { SelectedFilterType } from '../../interfaces/filters/interface'; const StyledPeopleContainer = styled.div` display: flex; diff --git a/front/src/pages/people/__stories__/People.stories.tsx b/front/src/pages/people/__stories__/People.stories.tsx index d8f9c228c..d5240cad8 100644 --- a/front/src/pages/people/__stories__/People.stories.tsx +++ b/front/src/pages/people/__stories__/People.stories.tsx @@ -4,8 +4,8 @@ import { ThemeProvider } from '@emotion/react'; import { lightTheme } from '../../../layout/styles/themes'; import { MockedProvider } from '@apollo/client/testing'; import { mockData } from '../__tests__/__data__/mock-data'; -import { GET_PEOPLE } from '../../../services/people'; -import { SEARCH_PEOPLE_QUERY } from '../../../services/search/search'; +import { GET_PEOPLE } from '../../../services/api/people'; +import { SEARCH_PEOPLE_QUERY } from '../../../services/api/search/search'; const component = { title: 'People', diff --git a/front/src/pages/people/__tests__/People.test.tsx b/front/src/pages/people/__tests__/People.test.tsx index 3b28b99b9..11e4ddf4a 100644 --- a/front/src/pages/people/__tests__/People.test.tsx +++ b/front/src/pages/people/__tests__/People.test.tsx @@ -5,11 +5,11 @@ import { act } from 'react-dom/test-utils'; import { GraphqlMutationPerson, GraphqlQueryPerson, -} from '../../../interfaces/person.interface'; +} from '../../../interfaces/entities/person.interface'; jest.mock('../../../apollo', () => { const personInterface = jest.requireActual( - '../../../interfaces/person.interface', + '../../../interfaces/entities/person.interface', ); return { apiClient: { diff --git a/front/src/pages/people/people-table.tsx b/front/src/pages/people/people-table.tsx index 4638dbff0..bd777f415 100644 --- a/front/src/pages/people/people-table.tsx +++ b/front/src/pages/people/people-table.tsx @@ -14,26 +14,30 @@ import Checkbox from '../../components/form/Checkbox'; import CompanyChip, { CompanyChipPropsType, } from '../../components/chips/CompanyChip'; -import { Person, mapToPerson } from '../../interfaces/person.interface'; -import EditableText from '../../components/table/editable-cell/EditableText'; import { - FilterConfigType, - SearchConfigType, - SortType, -} from '../../components/table/table-header/interface'; + Person, + mapToPerson, +} from '../../interfaces/entities/person.interface'; +import EditableText from '../../components/editable-cell/EditableText'; import { Order_By, People_Order_By } from '../../generated/graphql'; import { SEARCH_COMPANY_QUERY, SEARCH_PEOPLE_QUERY, -} from '../../services/search/search'; -import { Company, mapToCompany } from '../../interfaces/company.interface'; -import EditablePhone from '../../components/table/editable-cell/EditablePhone'; -import EditableFullName from '../../components/table/editable-cell/EditableFullName'; -import EditableDate from '../../components/table/editable-cell/EditableDate'; -import EditableRelation from '../../components/table/editable-cell/EditableRelation'; -import { updatePerson } from '../../services/people'; +} from '../../services/api/search/search'; +import { + Company, + mapToCompany, +} from '../../interfaces/entities/company.interface'; +import EditablePhone from '../../components/editable-cell/EditablePhone'; +import EditableFullName from '../../components/editable-cell/EditableFullName'; +import EditableDate from '../../components/editable-cell/EditableDate'; +import EditableRelation from '../../components/editable-cell/EditableRelation'; +import { updatePerson } from '../../services/api/people'; import { useMemo } from 'react'; import { SelectAllCheckbox } from '../../components/table/SelectAllCheckbox'; +import { SortType } from '../../interfaces/sorts/interface'; +import { FilterConfigType } from '../../interfaces/filters/interface'; +import { SearchConfigType } from '../../interfaces/search/interface'; export const availableSorts = [ { diff --git a/front/src/services/companies/__tests__/select.test.ts b/front/src/services/api/companies/__tests__/select.test.ts similarity index 86% rename from front/src/services/companies/__tests__/select.test.ts rename to front/src/services/api/companies/__tests__/select.test.ts index b8285923b..50b0f3647 100644 --- a/front/src/services/companies/__tests__/select.test.ts +++ b/front/src/services/api/companies/__tests__/select.test.ts @@ -1,4 +1,4 @@ -import { reduceSortsToOrderBy } from '../../../components/table/table-header/helpers'; +import { reduceSortsToOrderBy } from '../../../../components/table/table-header/helpers'; import { CompaniesSelectedSortType } from '../select'; describe('reduceSortsToOrderBy', () => { diff --git a/front/src/services/companies/index.ts b/front/src/services/api/companies/index.ts similarity index 100% rename from front/src/services/companies/index.ts rename to front/src/services/api/companies/index.ts diff --git a/front/src/services/companies/select.ts b/front/src/services/api/companies/select.ts similarity index 82% rename from front/src/services/companies/select.ts rename to front/src/services/api/companies/select.ts index e8954860a..ee87a1268 100644 --- a/front/src/services/companies/select.ts +++ b/front/src/services/api/companies/select.ts @@ -3,9 +3,9 @@ import { Order_By, Companies_Order_By, Companies_Bool_Exp, -} from '../../generated/graphql'; -import { GraphqlQueryCompany } from '../../interfaces/company.interface'; -import { SelectedSortType } from '../../components/table/table-header/interface'; +} from '../../../generated/graphql'; +import { GraphqlQueryCompany } from '../../../interfaces/entities/company.interface'; +import { SelectedSortType } from '../../../interfaces/sorts/interface'; export type CompaniesSelectedSortType = SelectedSortType; diff --git a/front/src/services/companies/update.ts b/front/src/services/api/companies/update.ts similarity index 94% rename from front/src/services/companies/update.ts rename to front/src/services/api/companies/update.ts index af200ce3f..c7a269814 100644 --- a/front/src/services/companies/update.ts +++ b/front/src/services/api/companies/update.ts @@ -1,6 +1,9 @@ import { FetchResult, gql } from '@apollo/client'; -import { Company, mapToGqlCompany } from '../../interfaces/company.interface'; -import { apiClient } from '../../apollo'; +import { + Company, + mapToGqlCompany, +} from '../../../interfaces/entities/company.interface'; +import { apiClient } from '../../../apollo'; export const UPDATE_COMPANY = gql` mutation UpdateCompany( diff --git a/front/src/services/people/__tests__/select.test.ts b/front/src/services/api/people/__tests__/select.test.ts similarity index 87% rename from front/src/services/people/__tests__/select.test.ts rename to front/src/services/api/people/__tests__/select.test.ts index a30fdb068..5833346ce 100644 --- a/front/src/services/people/__tests__/select.test.ts +++ b/front/src/services/api/people/__tests__/select.test.ts @@ -1,4 +1,4 @@ -import { reduceSortsToOrderBy } from '../../../components/table/table-header/helpers'; +import { reduceSortsToOrderBy } from '../../../../components/table/table-header/helpers'; import { PeopleSelectedSortType } from '../select'; describe('reduceSortsToOrderBy', () => { diff --git a/front/src/services/people/__tests__/update.test.ts b/front/src/services/api/people/__tests__/update.test.ts similarity index 83% rename from front/src/services/people/__tests__/update.test.ts rename to front/src/services/api/people/__tests__/update.test.ts index 5c5223a57..3665dfb3d 100644 --- a/front/src/services/people/__tests__/update.test.ts +++ b/front/src/services/api/people/__tests__/update.test.ts @@ -1,12 +1,12 @@ import { GraphqlMutationPerson, GraphqlQueryPerson, -} from '../../../interfaces/person.interface'; +} from '../../../../interfaces/entities/person.interface'; import { updatePerson } from '../update'; -jest.mock('../../../apollo', () => { +jest.mock('../../../../apollo', () => { const personInterface = jest.requireActual( - '../../../interfaces/person.interface', + '../../../../interfaces/entities/person.interface', ); return { apiClient: { @@ -31,6 +31,7 @@ it('updates a person', async () => { id: '7dfbc3f7-6e5e-4128-957e-8d86808cdf6b', name: 'ACME', domainName: 'example.com', + __typename: 'companies', }, phone: '+1 (555) 123-4567', pipes: [ @@ -42,6 +43,7 @@ it('updates a person', async () => { ], creationDate: new Date(), city: 'San Francisco', + __typename: 'people', }); expect(result.data).toBeDefined(); result.data && expect(result.data.email).toBe('john@example.com'); diff --git a/front/src/services/people/index.ts b/front/src/services/api/people/index.ts similarity index 100% rename from front/src/services/people/index.ts rename to front/src/services/api/people/index.ts diff --git a/front/src/services/people/select.ts b/front/src/services/api/people/select.ts similarity index 83% rename from front/src/services/people/select.ts rename to front/src/services/api/people/select.ts index b51512f78..68a6b48ca 100644 --- a/front/src/services/people/select.ts +++ b/front/src/services/api/people/select.ts @@ -1,11 +1,11 @@ import { QueryResult, gql, useQuery } from '@apollo/client'; -import { GraphqlQueryPerson } from '../../interfaces/person.interface'; +import { GraphqlQueryPerson } from '../../../interfaces/entities/person.interface'; import { Order_By, People_Bool_Exp, People_Order_By, -} from '../../generated/graphql'; -import { SelectedSortType } from '../../components/table/table-header/interface'; +} from '../../../generated/graphql'; +import { SelectedSortType } from '../../../interfaces/sorts/interface'; export type PeopleSelectedSortType = SelectedSortType; diff --git a/front/src/services/people/update.ts b/front/src/services/api/people/update.ts similarity index 94% rename from front/src/services/people/update.ts rename to front/src/services/api/people/update.ts index 5b688e299..33c3d77cb 100644 --- a/front/src/services/people/update.ts +++ b/front/src/services/api/people/update.ts @@ -1,6 +1,9 @@ import { FetchResult, gql } from '@apollo/client'; -import { Person, mapToGqlPerson } from '../../interfaces/person.interface'; -import { apiClient } from '../../apollo'; +import { + Person, + mapToGqlPerson, +} from '../../../interfaces/entities/person.interface'; +import { apiClient } from '../../../apollo'; export const UPDATE_PERSON = gql` mutation UpdatePeople( diff --git a/front/src/services/search/__data__/mock-search-data.ts b/front/src/services/api/search/__data__/mock-search-data.ts similarity index 100% rename from front/src/services/search/__data__/mock-search-data.ts rename to front/src/services/api/search/__data__/mock-search-data.ts diff --git a/front/src/services/search/search.ts b/front/src/services/api/search/search.ts similarity index 97% rename from front/src/services/search/search.ts rename to front/src/services/api/search/search.ts index 1c911fc23..ae09d7ec2 100644 --- a/front/src/services/search/search.ts +++ b/front/src/services/api/search/search.ts @@ -3,7 +3,7 @@ import { useMemo, useState } from 'react'; import { SearchConfigType, SearchableType, -} from '../../components/table/table-header/interface'; +} from '../../../interfaces/search/interface'; export const SEARCH_PEOPLE_QUERY = gql` query SearchQuery($where: people_bool_exp, $limit: Int) { diff --git a/front/src/services/users/index.tsx b/front/src/services/api/users/index.tsx similarity index 88% rename from front/src/services/users/index.tsx rename to front/src/services/api/users/index.tsx index eb8d6fe82..4570eb449 100644 --- a/front/src/services/users/index.tsx +++ b/front/src/services/api/users/index.tsx @@ -1,5 +1,5 @@ import { QueryResult, gql, useQuery } from '@apollo/client'; -import { GraphqlQueryUser } from '../../interfaces/user.interface'; +import { GraphqlQueryUser } from '../../../interfaces/entities/user.interface'; export const GET_CURRENT_USER = gql` query GetCurrentUser($uuid: uuid) { diff --git a/front/src/services/AuthService.ts b/front/src/services/auth/AuthService.ts similarity index 100% rename from front/src/services/AuthService.ts rename to front/src/services/auth/AuthService.ts diff --git a/front/src/services/__tests__/AuthService.test.tsx b/front/src/services/auth/__tests__/AuthService.test.tsx similarity index 100% rename from front/src/services/__tests__/AuthService.test.tsx rename to front/src/services/auth/__tests__/AuthService.test.tsx