diff --git a/front/src/App.tsx b/front/src/App.tsx index 5a74ddb33..1f64485f4 100644 --- a/front/src/App.tsx +++ b/front/src/App.tsx @@ -75,7 +75,7 @@ export function App() { } + element={} /> } /> } /> - } - active={currentPath === '/people'} - /> } active={currentPath === '/companies'} /> + } + active={currentPath === '/people'} + /> { const pipeline = data?.findManyPipeline[0] as Pipeline; setCurrentPipeline(pipeline); @@ -55,12 +63,12 @@ export function HooksCompanyBoard({ }) : []; const initialBoard: BoardPipelineStageColumn[] = - orderedPipelineStages?.map((pipelineStage) => ({ + orderedPipelineStages?.map((pipelineStage, i) => ({ pipelineStageId: pipelineStage.id, title: pipelineStage.name, colorCode: pipelineStage.color, index: pipelineStage.index || 0, - pipelineProgressIds: [], + pipelineProgressIds: board?.[i].pipelineProgressIds || [], })) || []; setBoard(initialBoard); }, diff --git a/front/src/modules/people/components/PeopleCompanyCreateCell.tsx b/front/src/modules/people/components/PeopleCompanyCreateCell.tsx index 0348d0b60..2def7f237 100644 --- a/front/src/modules/people/components/PeopleCompanyCreateCell.tsx +++ b/front/src/modules/people/components/PeopleCompanyCreateCell.tsx @@ -14,6 +14,8 @@ import { } from '~/generated/graphql'; import { logError } from '~/utils/logError'; +import { SEARCH_COMPANY_QUERY } from '../../search/queries/search'; + type OwnProps = { people: Pick; }; @@ -51,7 +53,10 @@ export function PeopleCompanyCreateCell({ people }: OwnProps) { address: '', createdAt: new Date().toISOString(), }, - refetchQueries: [getOperationName(GET_COMPANIES) || ''], + refetchQueries: [ + getOperationName(GET_COMPANIES) ?? '', + getOperationName(SEARCH_COMPANY_QUERY) ?? '', + ], }); await updatePeople({ diff --git a/front/src/pages/companies/Companies.tsx b/front/src/pages/companies/Companies.tsx index 631a73fde..8599ae7d6 100644 --- a/front/src/pages/companies/Companies.tsx +++ b/front/src/pages/companies/Companies.tsx @@ -17,6 +17,8 @@ import { useInsertCompanyMutation, } from '~/generated/graphql'; +import { SEARCH_COMPANY_QUERY } from '../../modules/search/queries/search'; + const StyledTableContainer = styled.div` display: flex; width: 100%; @@ -37,7 +39,10 @@ export function Companies() { await insertCompany({ variables: newCompany, - refetchQueries: [getOperationName(GET_COMPANIES) ?? ''], + refetchQueries: [ + getOperationName(GET_COMPANIES) ?? '', + getOperationName(SEARCH_COMPANY_QUERY) ?? '', + ], }); } diff --git a/server/src/core/company/company.service.ts b/server/src/core/company/company.service.ts index e4d924732..5045c4f00 100644 --- a/server/src/core/company/company.service.ts +++ b/server/src/core/company/company.service.ts @@ -1,6 +1,7 @@ import { Injectable } from '@nestjs/common'; import { PrismaService } from 'src/database/prisma.service'; +import companiesSeed from 'src/core/company/seed-data/companies.json'; @Injectable() export class CompanyService { @@ -36,4 +37,15 @@ export class CompanyService { // GroupBy groupBy = this.prismaService.company.groupBy; + async createDefaultCompanies({ workspaceId }: { workspaceId: string }) { + const companies = companiesSeed.map((company) => ({ + ...company, + workspaceId, + })); + await this.createMany({ + data: companies, + }); + + return this.findMany({ where: { workspaceId }}); + } } diff --git a/server/src/core/company/seed-data/companies.json b/server/src/core/company/seed-data/companies.json new file mode 100644 index 000000000..4ece168fc --- /dev/null +++ b/server/src/core/company/seed-data/companies.json @@ -0,0 +1,33 @@ +[ + { + "name": "Rudderstack", + "domainName": "rudderstack.com", + "address": "San Francisco", + "employees": 195 + }, + { + "name": "Medusa", + "domainName": "medusajs.com", + "address": "Copenhagen", + "employees": 57 + }, + { + "name": "Metabase", + "domainName": "metabase.com", + "address": "San Francisco", + "employees": 68 + }, + { + "name": "Strapi", + "domainName": "strapi.com", + "address": "Paris", + "employees": 95 + }, + { + "name": "Posthog", + "domainName": "posthog.com", + "address": "San Francisco", + "employees": 34 + } + ] + \ No newline at end of file diff --git a/server/src/core/person/person.service.ts b/server/src/core/person/person.service.ts index ef8598aca..0c5a85639 100644 --- a/server/src/core/person/person.service.ts +++ b/server/src/core/person/person.service.ts @@ -1,6 +1,9 @@ import { Injectable } from '@nestjs/common'; +import { Company } from '@prisma/client'; + import { PrismaService } from 'src/database/prisma.service'; +import peopleSeed from 'src/core/person/seed-data/people.json'; @Injectable() export class PersonService { @@ -36,4 +39,20 @@ export class PersonService { // GroupBy groupBy = this.prismaService.person.groupBy; + async createDefaultPeople({ + workspaceId, + companies, + }: { + workspaceId: string; + companies: Company[]; + }) { + const people = peopleSeed.map((person, i) => ({ + ...person, + companyId: companies[i].id || null, + workspaceId, + })); + return this.createMany({ + data: people, + }); + } } diff --git a/server/src/core/person/seed-data/people.json b/server/src/core/person/seed-data/people.json new file mode 100644 index 000000000..b53e7711f --- /dev/null +++ b/server/src/core/person/seed-data/people.json @@ -0,0 +1,38 @@ +[ + { + "firstName": "Soumyadeb", + "lastName": "Mitra", + "city": "San Francisco", + "email": "soumyadeb@rudderstack.com", + "phone": "" + }, + { + "firstName": "Sebastian", + "lastName": "Rindom", + "city": "Copenhagen", + "email": "sebastian@medusajs.com", + "phone": "" + }, + { + "firstName": "Sameer", + "lastName": "Al-Sakran", + "city": "San Francisco", + "email": "sameer@metabase.com", + "phone": "" + }, + { + "firstName": "Pierre", + "lastName": "Burgy", + "city": "Paris", + "email": "pierre@strapi.com", + "phone": "" + }, + { + "firstName": "James", + "lastName": "Hawkins", + "city": "San Francisco", + "email": "james@posthog.com", + "phone": "" + } +] + \ No newline at end of file diff --git a/server/src/core/workspace/services/workspace.service.spec.ts b/server/src/core/workspace/services/workspace.service.spec.ts index a71fae3ed..ac424bd98 100644 --- a/server/src/core/workspace/services/workspace.service.spec.ts +++ b/server/src/core/workspace/services/workspace.service.spec.ts @@ -4,6 +4,8 @@ import { PrismaService } from 'src/database/prisma.service'; import { prismaMock } from 'src/database/client-mock/jest-prisma-singleton'; import { PipelineService } from 'src/core/pipeline/services/pipeline.service'; import { PipelineStageService } from 'src/core/pipeline/services/pipeline-stage.service'; +import { PersonService } from 'src/core/person/person.service'; +import { CompanyService } from 'src/core/company/company.service'; import { WorkspaceService } from './workspace.service'; @@ -26,6 +28,14 @@ describe('WorkspaceService', () => { provide: PipelineStageService, useValue: {}, }, + { + provide: PersonService, + useValue: {}, + }, + { + provide: CompanyService, + useValue: {}, + }, ], }).compile(); diff --git a/server/src/core/workspace/services/workspace.service.ts b/server/src/core/workspace/services/workspace.service.ts index f97bc8b4d..b6fbf78f5 100644 --- a/server/src/core/workspace/services/workspace.service.ts +++ b/server/src/core/workspace/services/workspace.service.ts @@ -1,14 +1,20 @@ import { Injectable } from '@nestjs/common'; +import { v4 } from 'uuid'; + import { PipelineStageService } from 'src/core/pipeline/services/pipeline-stage.service'; import { PipelineService } from 'src/core/pipeline/services/pipeline.service'; import { PrismaService } from 'src/database/prisma.service'; +import { CompanyService } from 'src/core/company/company.service'; +import { PersonService } from 'src/core/person/person.service'; @Injectable() export class WorkspaceService { constructor( private readonly prismaService: PrismaService, private readonly pipelineService: PipelineService, + private readonly companyService: CompanyService, + private readonly personService: PersonService, private readonly pipelineStageService: PipelineStageService, ) {} @@ -45,7 +51,22 @@ export class WorkspaceService { // Customs async createDefaultWorkspace() { - const workspace = await this.create({ data: {} }); + const workspace = await this.create({ + data: { + inviteHash: v4(), + }, + }); + + // Create default companies + const companies = await this.companyService.createDefaultCompanies({ + workspaceId: workspace.id, + }); + + // Create default people + await this.personService.createDefaultPeople({ + workspaceId: workspace.id, + companies, + }); // Create default pipeline const pipeline = await this.pipelineService.createDefaultPipeline({ diff --git a/server/src/core/workspace/workspace.module.ts b/server/src/core/workspace/workspace.module.ts index a087fee34..35b7bf957 100644 --- a/server/src/core/workspace/workspace.module.ts +++ b/server/src/core/workspace/workspace.module.ts @@ -2,6 +2,8 @@ import { Module } from '@nestjs/common'; import { FileUploadService } from 'src/core/file/services/file-upload.service'; import { PipelineModule } from 'src/core/pipeline/pipeline.module'; +import { CompanyModule } from 'src/core/company/company.module'; +import { PersonModule } from 'src/core/person/person.module'; import { WorkspaceService } from './services/workspace.service'; import { WorkspaceMemberService } from './services/workspace-member.service'; @@ -9,7 +11,7 @@ import { WorkspaceMemberResolver } from './resolvers/workspace-member.resolver'; import { WorkspaceResolver } from './resolvers/workspace.resolver'; @Module({ - imports: [PipelineModule], + imports: [PipelineModule, CompanyModule, PersonModule], providers: [ WorkspaceService, FileUploadService,