@ -15,7 +15,7 @@ type ContainerProps = {
|
||||
const StyledContainer = styled.div<ContainerProps>`
|
||||
align-items: center;
|
||||
background-color: ${({ theme, isOn, color }) =>
|
||||
isOn ? color ?? theme.color.blue : theme.background.quaternary};
|
||||
isOn ? (color ?? theme.color.blue) : theme.background.quaternary};
|
||||
border-radius: 10px;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
|
||||
@ -24,9 +24,9 @@ const jestConfig: JestConfigWithTsJest = {
|
||||
extensionsToTreatAsEsm: ['.ts', '.tsx'],
|
||||
coverageThreshold: {
|
||||
global: {
|
||||
statements: 64,
|
||||
lines: 63,
|
||||
functions: 55,
|
||||
statements: 62,
|
||||
lines: 61,
|
||||
functions: 52,
|
||||
},
|
||||
},
|
||||
collectCoverageFrom: ['<rootDir>/src/**/*.ts'],
|
||||
|
||||
@ -23,7 +23,7 @@ import { loggerLink } from '../utils';
|
||||
const logger = loggerLink(() => 'Twenty');
|
||||
|
||||
export interface Options<TCacheShape> extends ApolloClientOptions<TCacheShape> {
|
||||
onError?: (err: GraphQLFormattedError | undefined) => void;
|
||||
onError?: (err: readonly GraphQLFormattedError[] | undefined) => void;
|
||||
onNetworkError?: (err: Error | ServerParseError | ServerError) => void;
|
||||
onTokenPairChange?: (tokenPair: AuthTokenPair) => void;
|
||||
onUnauthenticatedError?: () => void;
|
||||
@ -80,9 +80,8 @@ export class ApolloFactory<TCacheShape> implements ApolloManager<TCacheShape> {
|
||||
const errorLink = onError(
|
||||
({ graphQLErrors, networkError, forward, operation }) => {
|
||||
if (isDefined(graphQLErrors)) {
|
||||
onErrorCb?.(graphQLErrors);
|
||||
for (const graphQLError of graphQLErrors) {
|
||||
onErrorCb?.(graphQLError);
|
||||
|
||||
if (graphQLError.message === 'Unauthorized') {
|
||||
return fromPromise(
|
||||
renewToken(uri, this.tokenPair)
|
||||
|
||||
@ -11,7 +11,7 @@ import { useIsFieldReadOnly } from '@/object-record/record-field/hooks/useIsFiel
|
||||
import { FieldDefinition } from '@/object-record/record-field/types/FieldDefinition';
|
||||
import { FieldMetadata } from '@/object-record/record-field/types/FieldMetadata';
|
||||
|
||||
const entityId = 'entityId';
|
||||
const recordId = 'recordId';
|
||||
|
||||
const getWrapper =
|
||||
(fieldDefinition: FieldDefinition<FieldMetadata>) =>
|
||||
@ -19,7 +19,7 @@ const getWrapper =
|
||||
<FieldContext.Provider
|
||||
value={{
|
||||
fieldDefinition,
|
||||
entityId,
|
||||
recordId,
|
||||
hotkeyScope: 'hotkeyScope',
|
||||
isLabelIdentifier: false,
|
||||
}}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { ReactNode, useContext } from 'react';
|
||||
import { styled } from '@linaria/react';
|
||||
import { ReactNode, useContext } from 'react';
|
||||
import { BORDER_COMMON, ThemeContext } from 'twenty-ui';
|
||||
|
||||
import { FieldContext } from '@/object-record/record-field/contexts/FieldContext';
|
||||
@ -79,7 +79,7 @@ export const RecordTableCellBaseContainer = ({
|
||||
|
||||
const { hotkeyScope } = useContext(FieldContext);
|
||||
|
||||
const editHotkeyScope = { scope: hotkeyScope } ?? DEFAULT_CELL_SCOPE;
|
||||
const editHotkeyScope = { scope: hotkeyScope ?? DEFAULT_CELL_SCOPE };
|
||||
|
||||
return (
|
||||
<CellHotkeyScopeContext.Provider value={editHotkeyScope}>
|
||||
|
||||
@ -7918,7 +7918,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
|
||||
"__typename": "fieldEdge",
|
||||
"node": {
|
||||
"__typename": "field",
|
||||
"id": "af19a3ba-b725-4b9d-a0b7-8bf6b04fadbf",
|
||||
"id": "5dcef112-ce1b-46c1-a33a-4d1394628c34",
|
||||
"type": "DATE_TIME",
|
||||
"name": "updatedAt",
|
||||
"label": "Update date",
|
||||
@ -7941,7 +7941,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
|
||||
"__typename": "fieldEdge",
|
||||
"node": {
|
||||
"__typename": "field",
|
||||
"id": "af19a3ba-b725-4b9d-a0b7-8bf6b04fadds",
|
||||
"id": "277d8939-1ead-4cdb-a560-854644219779",
|
||||
"type": "MULTI_SELECT",
|
||||
"name": "testMultiSelect",
|
||||
"label": "Test Multi Select",
|
||||
@ -7964,7 +7964,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
|
||||
"__typename": "fieldEdge",
|
||||
"node": {
|
||||
"__typename": "field",
|
||||
"id": "tt929592-4f74-419e-8b26-6d216859078f",
|
||||
"id": "f207dd14-f05e-4f29-b222-8993d4680f31",
|
||||
"type": "RAW_JSON",
|
||||
"name": "testRawJson",
|
||||
"label": "Test Raw Json",
|
||||
@ -7987,7 +7987,7 @@ export const mockedStandardObjectMetadataQueryResult: ObjectMetadataItemsQuery =
|
||||
"__typename": "fieldEdge",
|
||||
"node": {
|
||||
"__typename": "field",
|
||||
"id": "vv929592-4f74-419e-8b26-6d216859078f",
|
||||
"id": "81db846a-a2f9-4b31-8931-81fac5cdd1b6",
|
||||
"type": "RATING",
|
||||
"name": "testRating",
|
||||
"label": "Rating",
|
||||
|
||||
@ -266,7 +266,7 @@ const customObjectMetadataItemEdge: ObjectEdge = {
|
||||
color: 'yellow',
|
||||
},
|
||||
{
|
||||
id: '3',
|
||||
id: '6f6e1421-8a42-4d4a-bf76-465b5f84b6d2',
|
||||
value: 'HIGH',
|
||||
label: 'High',
|
||||
color: 'red',
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { defineConfig } from 'tsup';
|
||||
import svgr from 'esbuild-plugin-svgr';
|
||||
import { Config } from '@svgr/core';
|
||||
import svgr from 'esbuild-plugin-svgr';
|
||||
import { defineConfig } from 'tsup';
|
||||
|
||||
const template: Config['template'] = (variables, { tpl }) => {
|
||||
return tpl`
|
||||
|
||||
@ -57,8 +57,8 @@ export const computePgGraphQLError = (
|
||||
const error = errors[0];
|
||||
const errorMessage = error?.message;
|
||||
|
||||
const mappedErrorKey = Object.keys(pgGraphQLErrorMapping).find(
|
||||
(key) => errorMessage?.includes(key),
|
||||
const mappedErrorKey = Object.keys(pgGraphQLErrorMapping).find((key) =>
|
||||
errorMessage?.includes(key),
|
||||
);
|
||||
|
||||
const mappedError = mappedErrorKey
|
||||
|
||||
@ -405,9 +405,9 @@ export class TimelineMessagingService {
|
||||
messageThreadIdsForWhichWorkspaceMemberIsNotInParticipants.includes(
|
||||
messageThreadId,
|
||||
)
|
||||
? threadVisibilityByThreadIdForWhichWorkspaceMemberIsNotInParticipants?.[
|
||||
? (threadVisibilityByThreadIdForWhichWorkspaceMemberIsNotInParticipants?.[
|
||||
messageThreadId
|
||||
] ?? MessageChannelVisibility.METADATA
|
||||
] ?? MessageChannelVisibility.METADATA)
|
||||
: MessageChannelVisibility.SHARE_EVERYTHING;
|
||||
|
||||
return threadVisibilityAcc;
|
||||
|
||||
@ -63,9 +63,12 @@ export class MessageQueueCoreModule extends ConfigurableModuleClass {
|
||||
const driverProvider: Provider = {
|
||||
provide: QUEUE_DRIVER,
|
||||
useFactory: async (...args: any[]) => {
|
||||
const config = await options.useFactory!(...args);
|
||||
if (options.useFactory) {
|
||||
const config = await options.useFactory(...args);
|
||||
|
||||
return this.createDriver(config);
|
||||
return this.createDriver(config);
|
||||
}
|
||||
throw new Error('useFactory is not defined');
|
||||
},
|
||||
inject: options.inject || [],
|
||||
};
|
||||
|
||||
@ -7,8 +7,10 @@ import compact from 'lodash.compact';
|
||||
import { Any, EntityManager, Repository } from 'typeorm';
|
||||
|
||||
import { ObjectRecordCreateEvent } from 'src/engine/integrations/event-emitter/types/object-record-create.event';
|
||||
import { FieldActorSource } from 'src/engine/metadata-modules/field-metadata/composite-types/actor.composite-type';
|
||||
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||
import { InjectObjectMetadataRepository } from 'src/engine/object-metadata-repository/object-metadata-repository.decorator';
|
||||
import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager';
|
||||
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
|
||||
import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity';
|
||||
import { CONTACTS_CREATION_BATCH_SIZE } from 'src/modules/contact-creation-manager/constants/contacts-creation-batch-size.constant';
|
||||
@ -22,8 +24,6 @@ import { PersonWorkspaceEntity } from 'src/modules/person/standard-objects/perso
|
||||
import { WorkspaceMemberRepository } from 'src/modules/workspace-member/repositories/workspace-member.repository';
|
||||
import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity';
|
||||
import { isWorkEmail } from 'src/utils/is-work-email';
|
||||
import { FieldActorSource } from 'src/engine/metadata-modules/field-metadata/composite-types/actor.composite-type';
|
||||
import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager';
|
||||
|
||||
@Injectable()
|
||||
export class CreateCompanyAndContactService {
|
||||
@ -105,7 +105,7 @@ export class CreateCompanyAndContactService {
|
||||
filteredContactsToCreateWithCompanyDomainNames
|
||||
.filter((participant) => participant.companyDomainName)
|
||||
.map((participant) => ({
|
||||
domainName: participant.companyDomainName!,
|
||||
domainName: participant.companyDomainName,
|
||||
createdBySource: source,
|
||||
createdByWorkspaceMember: connectedAccount.accountOwner,
|
||||
})),
|
||||
@ -196,7 +196,7 @@ export class CreateCompanyAndContactService {
|
||||
name: 'person.created',
|
||||
workspaceId,
|
||||
// FixMe: TypeORM typing issue... id is always returned when using save
|
||||
recordId: createdPerson.id!,
|
||||
recordId: createdPerson.id as string,
|
||||
objectMetadata,
|
||||
properties: {
|
||||
after: createdPerson,
|
||||
|
||||
@ -14,7 +14,7 @@ import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/sta
|
||||
import { computeDisplayName } from 'src/utils/compute-display-name';
|
||||
|
||||
type CompanyToCreate = {
|
||||
domainName: string;
|
||||
domainName: string | undefined;
|
||||
createdBySource: FieldActorSource;
|
||||
createdByWorkspaceMember?: WorkspaceMemberWorkspaceEntity | null;
|
||||
};
|
||||
@ -186,7 +186,9 @@ export class CreateCompanyService {
|
||||
return lastCompanyPosition ?? 0;
|
||||
}
|
||||
|
||||
private async getCompanyInfoFromDomainName(domainName: string): Promise<{
|
||||
private async getCompanyInfoFromDomainName(
|
||||
domainName: string | undefined,
|
||||
): Promise<{
|
||||
name: string;
|
||||
city: string;
|
||||
}> {
|
||||
@ -196,12 +198,12 @@ export class CreateCompanyService {
|
||||
const data = response.data;
|
||||
|
||||
return {
|
||||
name: data.name ?? getCompanyNameFromDomainName(domainName),
|
||||
name: data.name ?? getCompanyNameFromDomainName(domainName ?? ''),
|
||||
city: data.city,
|
||||
};
|
||||
} catch (e) {
|
||||
return {
|
||||
name: getCompanyNameFromDomainName(domainName),
|
||||
name: getCompanyNameFromDomainName(domainName ?? ''),
|
||||
city: '',
|
||||
};
|
||||
}
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { NestFactory } from '@nestjs/core';
|
||||
|
||||
import { shouldFilterException } from 'src/engine/utils/global-exception-handler.util';
|
||||
import { ExceptionHandlerService } from 'src/engine/integrations/exception-handler/exception-handler.service';
|
||||
import { LoggerService } from 'src/engine/integrations/logger/logger.service';
|
||||
import { shouldFilterException } from 'src/engine/utils/global-exception-handler.util';
|
||||
import { QueueWorkerModule } from 'src/queue-worker/queue-worker.module';
|
||||
|
||||
async function bootstrap() {
|
||||
@ -18,7 +18,7 @@ async function bootstrap() {
|
||||
exceptionHandlerService = app.get(ExceptionHandlerService);
|
||||
|
||||
// Inject our logger
|
||||
app.useLogger(loggerService!);
|
||||
app.useLogger(loggerService ?? false);
|
||||
} catch (err) {
|
||||
loggerService?.error(err?.message, err?.name);
|
||||
|
||||
|
||||
@ -1,13 +1,6 @@
|
||||
import { DocSearch } from '@docsearch/react';
|
||||
import { StoredDocSearchHit } from '@docsearch/react/dist/esm/types';
|
||||
import { env } from 'next-runtime-env';
|
||||
|
||||
interface AlgoliaHit extends StoredDocSearchHit {
|
||||
_snippetResult?: {
|
||||
content: { value: string };
|
||||
};
|
||||
}
|
||||
|
||||
interface AlgoliaDocSearchProps {
|
||||
pathname: string;
|
||||
}
|
||||
@ -18,7 +11,7 @@ export const AlgoliaDocSearch = ({ pathname }: AlgoliaDocSearchProps) => {
|
||||
: 'developer';
|
||||
return (
|
||||
<DocSearch
|
||||
hitComponent={({ hit }: { hit: AlgoliaHit }) => (
|
||||
hitComponent={({ hit }: { hit: any }) => (
|
||||
<section className="DocSearch-Hits">
|
||||
<a href={hit.url}>
|
||||
<div className="DocSearch-Hit-Container">
|
||||
|
||||
Reference in New Issue
Block a user