diff --git a/packages/twenty-front/src/modules/accounts/types/account.ts b/packages/twenty-front/src/modules/accounts/interface/Account.ts similarity index 100% rename from packages/twenty-front/src/modules/accounts/types/account.ts rename to packages/twenty-front/src/modules/accounts/interface/Account.ts diff --git a/packages/twenty-front/src/modules/activities/tasks/hooks/useTasks.ts b/packages/twenty-front/src/modules/activities/tasks/hooks/useTasks.ts index 5e168bf3b..1d6293ddf 100644 --- a/packages/twenty-front/src/modules/activities/tasks/hooks/useTasks.ts +++ b/packages/twenty-front/src/modules/activities/tasks/hooks/useTasks.ts @@ -1,6 +1,5 @@ import { isNonEmptyString } from '@sniptt/guards'; import { DateTime } from 'luxon'; -import { undefined } from 'zod'; import { Activity } from '@/activities/types/Activity'; import { ActivityTargetableEntity } from '@/activities/types/ActivityTargetableEntity'; @@ -37,19 +36,19 @@ export const useTasks = (props?: UseTasksProps) => { skip: !entity && !selectedFilter, filter: { completedAt: { is: 'NOT_NULL' }, - id: isDefined(entity) - ? { - in: activityTargets?.map( - (activityTarget) => activityTarget.activityId, - ), - } - : undefined, + ...(isDefined(entity) && { + id: { + in: activityTargets?.map( + (activityTarget) => activityTarget.activityId, + ), + }, + }), type: { eq: 'Task' }, - assigneeId: isNonEmptyString(selectedFilter?.value) - ? { - eq: selectedFilter?.value, - } - : undefined, + ...(isNonEmptyString(selectedFilter?.value) && { + assigneeId: { + eq: selectedFilter?.value, + }, + }), }, orderBy: { createdAt: 'DescNullsFirst', @@ -61,19 +60,19 @@ export const useTasks = (props?: UseTasksProps) => { skip: !entity && !selectedFilter, filter: { completedAt: { is: 'NULL' }, - id: isDefined(entity) - ? { - in: activityTargets?.map( - (activityTarget) => activityTarget.activityId, - ), - } - : undefined, + ...(isDefined(entity) && { + id: { + in: activityTargets?.map( + (activityTarget) => activityTarget.activityId, + ), + }, + }), type: { eq: 'Task' }, - assigneeId: isNonEmptyString(selectedFilter?.value) - ? { - eq: selectedFilter?.value, - } - : undefined, + ...(isNonEmptyString(selectedFilter?.value) && { + assigneeId: { + eq: selectedFilter?.value, + }, + }), }, orderBy: { createdAt: 'DescNullsFirst', diff --git a/packages/twenty-front/src/modules/object-record/hooks/useFindManyRecords.ts b/packages/twenty-front/src/modules/object-record/hooks/useFindManyRecords.ts index 19ea22a95..37af0b652 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useFindManyRecords.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useFindManyRecords.ts @@ -10,6 +10,7 @@ import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadata import { ObjectMetadataItemIdentifier } from '@/object-metadata/types/ObjectMetadataItemIdentifier'; import { OrderByField } from '@/object-metadata/types/OrderByField'; import { getRecordOptimisticEffectDefinition } from '@/object-record/graphql/optimistic-effect-definition/getRecordOptimisticEffectDefinition'; +import { ObjectRecordFilter } from '@/object-record/types/ObjectRecordFilter'; import { filterUniqueRecordEdgesByCursor } from '@/object-record/utils/filterUniqueRecordEdgesByCursor'; import { DEFAULT_SEARCH_REQUEST_LIMIT } from '@/search/hooks/useFilteredSearchEntityQuery'; import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; @@ -25,7 +26,6 @@ import { PaginatedRecordTypeResults, } from '../types/PaginatedRecordTypeResults'; import { mapPaginatedRecordsToRecords } from '../utils/mapPaginatedRecordsToRecords'; -import { ObjectRecordFilter } from '@/object-record/types/ObjectRecordFilter'; export const useFindManyRecords = < RecordType extends { id: string } & Record, @@ -140,7 +140,9 @@ export const useFindManyRecords = < if (isNonEmptyArray(previousEdges) && isNonEmptyArray(nextEdges)) { newEdges = filterUniqueRecordEdgesByCursor([ + // eslint-disable-next-line no-unsafe-optional-chaining ...prev?.[objectMetadataItem.namePlural]?.edges, + // eslint-disable-next-line no-unsafe-optional-chaining ...fetchMoreResult?.[objectMetadataItem.namePlural]?.edges, ]); } diff --git a/packages/twenty-front/src/modules/object-record/hooks/useObjectRecordBoard.ts b/packages/twenty-front/src/modules/object-record/hooks/useObjectRecordBoard.ts index 54ab3decb..068be57f3 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useObjectRecordBoard.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useObjectRecordBoard.ts @@ -3,10 +3,10 @@ import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; import { Company } from '@/companies/types/Company'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; -import { turnFiltersIntoObjectRecordFilters } from '@/object-record/utils/turnFiltersIntoWhereClause'; import { turnSortsIntoOrderBy } from '@/object-record/object-sort-dropdown/utils/turnSortsIntoOrderBy'; import { useRecordBoardScopedStates } from '@/object-record/record-board/hooks/internal/useRecordBoardScopedStates'; import { PaginatedRecordTypeResults } from '@/object-record/types/PaginatedRecordTypeResults'; +import { turnFiltersIntoObjectRecordFilters } from '@/object-record/utils/turnFiltersIntoWhereClause'; import { Opportunity } from '@/pipeline/types/Opportunity'; import { PipelineStep } from '@/pipeline/types/PipelineStep'; diff --git a/packages/twenty-front/src/modules/object-record/hooks/useObjectRecordTable.ts b/packages/twenty-front/src/modules/object-record/hooks/useObjectRecordTable.ts index 5f0e2fce6..a541b0ae6 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/useObjectRecordTable.ts +++ b/packages/twenty-front/src/modules/object-record/hooks/useObjectRecordTable.ts @@ -3,10 +3,10 @@ import { useRecoilValue, useSetRecoilState } from 'recoil'; import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectNameSingularFromPlural } from '@/object-metadata/hooks/useObjectNameSingularFromPlural'; -import { turnFiltersIntoObjectRecordFilters } from '@/object-record/utils/turnFiltersIntoWhereClause'; import { turnSortsIntoOrderBy } from '@/object-record/object-sort-dropdown/utils/turnSortsIntoOrderBy'; import { useRecordTableScopedStates } from '@/object-record/record-table/hooks/internal/useRecordTableScopedStates'; import { useRecordTable } from '@/object-record/record-table/hooks/useRecordTable'; +import { turnFiltersIntoObjectRecordFilters } from '@/object-record/utils/turnFiltersIntoWhereClause'; import { signInBackgroundMockCompanies } from '@/sign-in-background-mock/constants/signInBackgroundMockCompanies'; import { useFindManyRecords } from './useFindManyRecords'; diff --git a/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/turnSortsIntoOrderBy.ts b/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/turnSortsIntoOrderBy.ts index 10cf2d68a..90adec1f6 100644 --- a/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/turnSortsIntoOrderBy.ts +++ b/packages/twenty-front/src/modules/object-record/object-sort-dropdown/utils/turnSortsIntoOrderBy.ts @@ -25,7 +25,7 @@ export const turnSortsIntoOrderBy = ( [fields[0].name]: 'DescNullsFirst', }; } - + sorts.forEach((sort) => { const correspondingField = fields.find( (field) => field.id === sort.fieldMetadataId, diff --git a/packages/twenty-front/src/modules/object-record/record-board/hooks/internal/useRecordBoardScopedStates.ts b/packages/twenty-front/src/modules/object-record/record-board/hooks/internal/useRecordBoardScopedStates.ts index 3f90b4c4f..e1135facc 100644 --- a/packages/twenty-front/src/modules/object-record/record-board/hooks/internal/useRecordBoardScopedStates.ts +++ b/packages/twenty-front/src/modules/object-record/record-board/hooks/internal/useRecordBoardScopedStates.ts @@ -2,12 +2,12 @@ import { RecordBoardScopeInternalContext } from '@/object-record/record-board/sc import { getRecordBoardScopedStates } from '@/object-record/record-board/utils/getRecordBoardScopedStates'; import { useAvailableScopeIdOrThrow } from '@/ui/utilities/recoil-scope/scopes-internal/hooks/useAvailableScopeId'; -type useRecordBoardScopedStates = { +type useRecordBoardScopedStatesProps = { recordBoardScopeId?: string; }; export const useRecordBoardScopedStates = ( - args?: useRecordBoardScopedStates, + args?: useRecordBoardScopedStatesProps, ) => { const { recordBoardScopeId } = args ?? {}; diff --git a/packages/twenty-front/src/modules/object-record/record-board/scopes/scope-internal-context/RecordBoardScopeInternalContext.ts b/packages/twenty-front/src/modules/object-record/record-board/scopes/scope-internal-context/RecordBoardScopeInternalContext.ts index a2d9a3999..be1ff1a06 100644 --- a/packages/twenty-front/src/modules/object-record/record-board/scopes/scope-internal-context/RecordBoardScopeInternalContext.ts +++ b/packages/twenty-front/src/modules/object-record/record-board/scopes/scope-internal-context/RecordBoardScopeInternalContext.ts @@ -1,7 +1,7 @@ import { ScopedStateKey } from '@/ui/utilities/recoil-scope/scopes-internal/types/ScopedStateKey'; import { createScopeInternalContext } from '@/ui/utilities/recoil-scope/scopes-internal/utils/createScopeInternalContext'; -type RecordBoardScopeInternalContext = ScopedStateKey; +type RecordBoardScopeInternalContextType = ScopedStateKey; export const RecordBoardScopeInternalContext = - createScopeInternalContext(); + createScopeInternalContext(); diff --git a/packages/twenty-front/src/modules/object-record/record-table/components/RecordTableHeaderPlusButtonContent.tsx b/packages/twenty-front/src/modules/object-record/record-table/components/RecordTableHeaderPlusButtonContent.tsx index d148afe2c..d7c19abe8 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/components/RecordTableHeaderPlusButtonContent.tsx +++ b/packages/twenty-front/src/modules/object-record/record-table/components/RecordTableHeaderPlusButtonContent.tsx @@ -3,7 +3,7 @@ import { Link } from 'react-router-dom'; import styled from '@emotion/styled'; import { useRecoilValue } from 'recoil'; -import { IconPlus, IconSettings } from '@/ui/display/icon'; +import { IconSettings } from '@/ui/display/icon'; import { useLazyLoadIcons } from '@/ui/input/hooks/useLazyLoadIcons'; import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; import { DropdownMenuSeparator } from '@/ui/layout/dropdown/components/DropdownMenuSeparator'; diff --git a/packages/twenty-front/src/modules/object-record/types/ObjectRecordFilter.ts b/packages/twenty-front/src/modules/object-record/types/ObjectRecordFilter.ts index db6cea2a9..81a9db243 100644 --- a/packages/twenty-front/src/modules/object-record/types/ObjectRecordFilter.ts +++ b/packages/twenty-front/src/modules/object-record/types/ObjectRecordFilter.ts @@ -36,7 +36,6 @@ export type FloatFilter = { is?: IsFilter; }; - export type DateFilter = { eq?: string; gt?: string; @@ -61,12 +60,21 @@ export type FullNameFilter = { lastName?: StringFilter; }; -export type LeafFilter = UUIDFilter | StringFilter | FloatFilter | DateFilter | CurrencyFilter | URLFilter | FullNameFilter +export type LeafFilter = + | UUIDFilter + | StringFilter + | FloatFilter + | DateFilter + | CurrencyFilter + | URLFilter + | FullNameFilter; -export type ObjectRecordFilter = { - and?: ObjectRecordFilter[]; - or?: ObjectRecordFilter[]; - not?: ObjectRecordFilter; -} | { - [fieldName: string]: LeafFilter -} \ No newline at end of file +export type ObjectRecordFilter = + | { + and?: ObjectRecordFilter[]; + or?: ObjectRecordFilter[]; + not?: ObjectRecordFilter; + } + | { + [fieldName: string]: LeafFilter; + }; diff --git a/packages/twenty-front/src/modules/object-record/utils/turnFiltersIntoWhereClause.ts b/packages/twenty-front/src/modules/object-record/utils/turnFiltersIntoWhereClause.ts index 110d494a4..eefebb1c1 100644 --- a/packages/twenty-front/src/modules/object-record/utils/turnFiltersIntoWhereClause.ts +++ b/packages/twenty-front/src/modules/object-record/utils/turnFiltersIntoWhereClause.ts @@ -1,8 +1,16 @@ +import { + CurrencyFilter, + DateFilter, + FloatFilter, + FullNameFilter, + ObjectRecordFilter, + StringFilter, + URLFilter, +} from '@/object-record/types/ObjectRecordFilter'; import { ViewFilterOperand } from '@/views/types/ViewFilterOperand'; import { Field } from '~/generated/graphql'; import { Filter } from '../object-filter-dropdown/types/Filter'; -import { CurrencyFilter, DateFilter, FloatFilter, FullNameFilter, ObjectRecordFilter, StringFilter, URLFilter } from '@/object-record/types/ObjectRecordFilter'; export type RawUIFilter = Omit & { definition: { @@ -16,11 +24,11 @@ export const turnFiltersIntoObjectRecordFilters = ( ): ObjectRecordFilter => { const objectRecordFilters: ObjectRecordFilter[] = []; - for(const rawUIFilter of rawUIFilters) { + for (const rawUIFilter of rawUIFilters) { const correspondingField = fields.find( (field) => field.id === rawUIFilter.fieldMetadataId, ); - + if (!correspondingField) { throw new Error( `Could not find field ${rawUIFilter.fieldMetadataId} in metadata object`, @@ -38,7 +46,7 @@ export const turnFiltersIntoObjectRecordFilters = ( ilike: `%${rawUIFilter.value}%`, } as StringFilter, }); - break + break; case ViewFilterOperand.DoesNotContain: objectRecordFilters.push({ not: { @@ -47,7 +55,7 @@ export const turnFiltersIntoObjectRecordFilters = ( } as StringFilter, }, }); - break + break; default: throw new Error( `Unknown operand ${rawUIFilter.operand} for ${rawUIFilter.definition.type} filter`, @@ -107,6 +115,7 @@ export const turnFiltersIntoObjectRecordFilters = ( ); } + // eslint-disable-next-line no-case-declarations const parsedRecordIds = JSON.parse(rawUIFilter.value) as string[]; if (parsedRecordIds.length > 0) { diff --git a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsCard.tsx b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsCard.tsx index 3bd8b146d..867da153b 100644 --- a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsCard.tsx +++ b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsCard.tsx @@ -2,7 +2,7 @@ import { useNavigate } from 'react-router-dom'; import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; -import { Account } from '@/accounts/types/Account'; +import { Account } from '@/accounts/interface/Account'; import { IconAt, IconPlus } from '@/ui/display/icon'; import { LightIconButton } from '@/ui/input/button/components/LightIconButton'; import { Card } from '@/ui/layout/card/components/Card'; diff --git a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsRow.tsx b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsRow.tsx index d33a734d7..6e7472d24 100644 --- a/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsRow.tsx +++ b/packages/twenty-front/src/modules/settings/accounts/components/SettingsAccountsRow.tsx @@ -2,7 +2,7 @@ import { useNavigate } from 'react-router-dom'; import { useTheme } from '@emotion/react'; import styled from '@emotion/styled'; -import { Account } from '@/accounts/types/Account'; +import { Account } from '@/accounts/interface/Account'; import { IconDotsVertical, IconMail, IconTrash } from '@/ui/display/icon'; import { IconGoogle } from '@/ui/display/icon/components/IconGoogle'; import { LightIconButton } from '@/ui/input/button/components/LightIconButton'; diff --git a/packages/twenty-front/src/modules/ui/layout/card/components/__stories__/Card.stories.tsx b/packages/twenty-front/src/modules/ui/layout/card/components/__stories__/Card.stories.tsx index 557793c50..c3309e37c 100644 --- a/packages/twenty-front/src/modules/ui/layout/card/components/__stories__/Card.stories.tsx +++ b/packages/twenty-front/src/modules/ui/layout/card/components/__stories__/Card.stories.tsx @@ -11,8 +11,8 @@ const meta: Meta = { title: 'UI/Layout/Card/Card', component: Card, decorators: [ComponentDecorator], - render: (args) => ( - + render: () => ( + Lorem ipsum Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec id massa diff --git a/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeys.tsx b/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeys.tsx index df38e453c..a029eac38 100644 --- a/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeys.tsx +++ b/packages/twenty-front/src/pages/settings/developers/api-keys/SettingsDevelopersApiKeys.tsx @@ -42,11 +42,9 @@ export const SettingsDevelopersApiKeys = () => { const [apiKeys, setApiKeys] = useState>([]); - const filter = { revokedAt: { is: 'NULL' } }; - useFindManyRecords({ objectNameSingular: 'apiKey', - filter, + filter: { revokedAt: { is: 'NULL' } }, orderBy: {}, onCompleted: (data) => { setApiKeys( diff --git a/packages/twenty-front/src/testing/mock-data/accounts.ts b/packages/twenty-front/src/testing/mock-data/accounts.ts index 908710efc..ea1bf8c56 100644 --- a/packages/twenty-front/src/testing/mock-data/accounts.ts +++ b/packages/twenty-front/src/testing/mock-data/accounts.ts @@ -1,4 +1,4 @@ -import { Account } from '@/accounts/types/Account'; +import { Account } from '@/accounts/interface/Account'; export const mockedAccounts: Account[] = [ { email: 'thomas@twenty.com', uuid: '0794b782-f52e-48c3-977e-b0f57f90de24' }, diff --git a/packages/twenty-postgres/macos/intel/provision-postgres-macos-intel.sh b/packages/twenty-postgres/macos/intel/provision-postgres-macos-intel.sh index 6f80be5b8..5d6438fdb 100755 --- a/packages/twenty-postgres/macos/intel/provision-postgres-macos-intel.sh +++ b/packages/twenty-postgres/macos/intel/provision-postgres-macos-intel.sh @@ -1,7 +1,7 @@ #!/bin/bash PG_MAIN_VERSION=15 -PG_GRAPHQL_VERSION=1.4.2 +PG_GRAPHQL_VERSION=1.3.0 current_directory=$(pwd) @@ -9,11 +9,11 @@ echo "Step [1/4]: Installing PostgreSQL..." brew reinstall postgresql@$PG_MAIN_VERSION echo "Step [2/4]: Installing GraphQL for PostgreSQL..." -cp ./macos/arm/${PG_MAIN_VERSION}/pg_graphql/${PG_GRAPHQL_VERSION}/pg_graphql--${PG_GRAPHQL_VERSION}.sql \ +cp ./macos/intel/${PG_MAIN_VERSION}/pg_graphql/${PG_GRAPHQL_VERSION}/pg_graphql--${PG_GRAPHQL_VERSION}.sql \ /usr/local/opt/postgresql@${PG_MAIN_VERSION}/share/postgresql@${PG_MAIN_VERSION}/extension -cp ./macos/arm/${PG_MAIN_VERSION}/pg_graphql/${PG_GRAPHQL_VERSION}/pg_graphql.control \ +cp ./macos/intel/${PG_MAIN_VERSION}/pg_graphql/${PG_GRAPHQL_VERSION}/pg_graphql.control \ /usr/local/opt/postgresql@${PG_MAIN_VERSION}/share/postgresql@${PG_MAIN_VERSION}/extension -cp ./macos/arm/${PG_MAIN_VERSION}/pg_graphql/${PG_GRAPHQL_VERSION}/pg_graphql.so \ +cp ./macos/intel/${PG_MAIN_VERSION}/pg_graphql/${PG_GRAPHQL_VERSION}/pg_graphql.so \ /usr/local/opt/postgresql@${PG_MAIN_VERSION}/lib/postgresql export PATH="/usr/local/opt/postgresql@${PG_MAIN_VERSION}/bin:$PATH" diff --git a/packages/twenty-server/src/workspace/workspace.factory.ts b/packages/twenty-server/src/workspace/workspace.factory.ts index 699bb2b47..e0e59e9ea 100644 --- a/packages/twenty-server/src/workspace/workspace.factory.ts +++ b/packages/twenty-server/src/workspace/workspace.factory.ts @@ -60,9 +60,8 @@ export class WorkspaceFactory { } // Get typeDefs from cache - let typeDefs = await this.workspaceSchemaStorageService.getTypeDefs( - workspaceId, - ); + let typeDefs = + await this.workspaceSchemaStorageService.getTypeDefs(workspaceId); let usedScalarNames = await this.workspaceSchemaStorageService.getUsedScalarNames(workspaceId);