@things-factory/contact 10.1.232 → 10.1.234
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-client/components/contact-popup.d.ts +2 -1
- package/dist-client/components/contact-popup.js +8 -3
- package/dist-client/components/contact-popup.js.map +1 -1
- package/dist-client/pages/contact-importer.d.ts +11 -2
- package/dist-client/pages/contact-importer.js +10 -10
- package/dist-client/pages/contact-importer.js.map +1 -1
- package/dist-client/pages/contact-list-page.js +1 -1
- package/dist-client/pages/contact-list-page.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/controllers/register-contact-as-system-user.js +2 -2
- package/dist-server/controllers/register-contact-as-system-user.js.map +1 -1
- package/dist-server/service/contact/contact-mutation.js +1 -1
- package/dist-server/service/contact/contact-mutation.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/translations/en.json +6 -4
- package/translations/es.json +6 -4
- package/translations/ja.json +6 -4
- package/translations/ko.json +6 -4
- package/translations/ms.json +6 -4
- package/translations/zh.json +6 -4
|
@@ -15,11 +15,11 @@ async function registerContactAsSystemUser({ contactId, roleName }, context) {
|
|
|
15
15
|
}
|
|
16
16
|
});
|
|
17
17
|
if (!contact) {
|
|
18
|
-
throw new Error(context.t('error.contact-not-found'
|
|
18
|
+
throw new Error(context.t('error.contact-not-found'));
|
|
19
19
|
}
|
|
20
20
|
const email = contact.getContactItem(contact_1.ContactField.Email, 'work');
|
|
21
21
|
if (!email) {
|
|
22
|
-
throw new Error(context.t('error.contact-email-not-set', {
|
|
22
|
+
throw new Error(context.t('error.contact-email-not-set', { name: contact.name ?? '' }));
|
|
23
23
|
}
|
|
24
24
|
const userRepository = (0, shell_1.getRepository)(auth_base_1.User, tx);
|
|
25
25
|
const existingUser = await userRepository.findOne({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-contact-as-system-user.js","sourceRoot":"","sources":["../../server/controllers/register-contact-as-system-user.ts"],"names":[],"mappings":";;AAKA,kEA8EC;AAnFD,qCAA+B;AAC/B,yDAAoE;AACpE,iDAAqD;AACrD,wDAAkE;AAE3D,KAAK,UAAU,2BAA2B,CAC/C,EAAE,SAAS,EAAE,QAAQ,EAA4C,EACjE,OAAwB;IAExB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAE1C,MAAM,iBAAiB,GAAG,IAAA,qBAAa,EAAC,iBAAO,EAAE,EAAE,CAAC,CAAA;IAEpD,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC;QAC9C,KAAK,EAAE;YACL,EAAE,EAAE,SAAS;YACb,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;SAC1B;KACF,CAAC,CAAA;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,
|
|
1
|
+
{"version":3,"file":"register-contact-as-system-user.js","sourceRoot":"","sources":["../../server/controllers/register-contact-as-system-user.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILike } from 'typeorm'\nimport { Role, sealPassword, User } from '@things-factory/auth-base'\nimport { getRepository } from '@things-factory/shell'\nimport { Contact, ContactField } from '../service/contact/contact'\n\nexport async function registerContactAsSystemUser(\n { contactId, roleName }: { contactId: string; roleName?: string },\n context: ResolverContext\n) {\n const { domain, user, tx } = context.state\n\n const contactRepository = getRepository(Contact, tx)\n\n const contact = await contactRepository.findOne({\n where: {\n id: contactId,\n domain: { id: domain.id }\n }\n })\n\n if (!contact) {\n throw new Error(context.t('error.contact-not-found'))\n }\n\n const email = contact.getContactItem(ContactField.Email, 'work')\n\n if (!email) {\n throw new Error(context.t('error.contact-email-not-set', { name: contact.name ?? '' }))\n }\n\n const userRepository = getRepository(User, tx)\n const existingUser = await userRepository.findOne({\n where: { email: ILike(email) },\n relations: ['domains', 'roles']\n })\n\n if (existingUser && !existingUser.domains.find(d => d.id === domain.id)) {\n existingUser.domains = [...existingUser.domains, domain]\n }\n\n /*\n * A new account waits for the password its person sets - nobody here sets it. The setup link is issued from user\n * management (ADR-0161 decision 5).\n */\n const newUser: Partial<User> = existingUser\n ? existingUser\n : {\n name: contact.name,\n email,\n userType: 'user',\n domains: [domain],\n passwordUpdatedAt: new Date(),\n updater: user,\n creator: user\n }\n\n if (!existingUser) {\n sealPassword(newUser)\n }\n\n if (roleName) {\n const roleRepository = getRepository(Role, tx)\n const role = await roleRepository.findOne({\n where: {\n name: roleName,\n domain: { id: domain.id }\n }\n })\n\n if (!role) {\n throw new Error(context.t('error.contact-role-not-found', { roleName }))\n }\n\n if (newUser.roles) {\n if (!newUser.roles.find(role => role.name == roleName)) {\n newUser.roles = [...newUser.roles, role]\n }\n } else {\n newUser.roles = [role]\n }\n }\n\n return await userRepository.save(newUser)\n}\n"]}
|
|
@@ -88,7 +88,7 @@ let ContactMutation = class ContactMutation {
|
|
|
88
88
|
where: { domain: { id: domain.id }, id: updateRecord.id }
|
|
89
89
|
});
|
|
90
90
|
if (!contact) {
|
|
91
|
-
throw new
|
|
91
|
+
throw new shell_1.Refusal('contact-not-found', {}, `failed to find contact to update: ${updateRecord.id}`);
|
|
92
92
|
}
|
|
93
93
|
const result = await contactRepo.save({
|
|
94
94
|
...contact,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contact-mutation.js","sourceRoot":"","sources":["../../../server/service/contact/contact-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Mutation, Arg, Ctx, Directive, UseMiddleware } from 'type-graphql'\nimport { In } from 'typeorm'\n\nimport { createAttachment, deleteAttachmentsByRef } from '@things-factory/attachment-base'\nimport { SpeakRefusals } from '@things-factory/shell'\n\nimport { Contact } from './contact'\nimport { NewContact, ContactPatch } from './contact-type'\nimport { withCounterparty } from './contact-counterparty'\n\n@UseMiddleware(SpeakRefusals)\n@Resolver(Contact)\nexport class ContactMutation {\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Contact, { description: 'To create new Contact' })\n async createContact(@Arg('contact') contact: NewContact, @Ctx() context: ResolverContext): Promise<Contact> {\n const { domain, user, tx } = context.state\n const file = contact.profile?.file\n\n if (contact.profile) {\n const { left, top, zoom } = contact.profile\n contact.profile = { left, top, zoom }\n }\n\n const ContactRepository = tx.getRepository(Contact)\n\n const result = await ContactRepository.save({\n ...(await withCounterparty(tx, domain, contact)),\n domain,\n creator: user,\n updater: user\n })\n\n if (file) {\n await createAttachment(\n null,\n {\n attachment: {\n file,\n refType: Contact.name,\n refBy: result.id\n }\n },\n context\n )\n }\n\n return result\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Contact, { description: 'To modify Contact information' })\n async updateContact(\n @Arg('id') id: string,\n @Arg('patch') patch: ContactPatch,\n @Ctx() context: ResolverContext\n ): Promise<Contact> {\n const { domain, user, tx } = context.state\n const file = patch.profile?.file\n\n if (patch.profile) {\n const { left, top, zoom } = patch.profile\n patch.profile = { left, top, zoom } as any\n }\n\n const ContactRepository = tx.getRepository(Contact)\n\n const contact = await ContactRepository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n const result = await ContactRepository.save({\n ...contact,\n ...(await withCounterparty(tx, domain, patch)),\n updater: user\n })\n\n if (file) {\n await deleteAttachmentsByRef(null, { refBys: [result.id] }, context)\n await createAttachment(\n null,\n {\n attachment: {\n file,\n refType: Contact.name,\n refBy: result.id\n }\n },\n context\n )\n }\n\n return result\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => [Contact], { description: \"To modify multiple Contacts' information\" })\n async updateMultipleContact(\n @Arg('patches', type => [ContactPatch]) patches: ContactPatch[],\n @Ctx() context: ResolverContext\n ): Promise<Contact[]> {\n const { domain, user, tx } = context.state\n\n let results = []\n const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')\n const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')\n const contactRepo = tx.getRepository(Contact)\n\n if (_createRecords.length > 0) {\n for (let i = 0; i < _createRecords.length; i++) {\n const newRecord = _createRecords[i]\n\n const result = await contactRepo.save({\n ...(await withCounterparty(tx, domain, newRecord)),\n domain,\n creator: user,\n updater: user\n })\n\n results.push({ ...result, cuFlag: '+' })\n }\n }\n\n if (_updateRecords.length > 0) {\n for (let i = 0; i < _updateRecords.length; i++) {\n const updateRecord = _updateRecords[i]\n const contact = await contactRepo.findOne({\n where: { domain: { id: domain.id }, id: updateRecord.id }\n })\n\n if (!contact) {\n throw new Error(`failed to find contact to update: ${updateRecord.id}`)\n }\n\n const result = await contactRepo.save({\n ...contact,\n ...(await withCounterparty(tx, domain, updateRecord)),\n updater: user\n })\n\n results.push({ ...result, cuFlag: 'M' })\n }\n }\n\n return results\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'To delete Contact' })\n async deleteContact(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(Contact).softDelete({ domain: { id: domain.id }, id })\n // await deleteAttachmentsByRef(null, { refBys: [id] }, context)\n\n return true\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'To delete multiple Contacts' })\n async deleteContacts(@Arg('ids', type => [String]) ids: string[], @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(Contact).softDelete({\n domain: { id: domain.id },\n id: In(ids)\n })\n\n // await deleteAttachmentsByRef(null, { refBys: ids }, context)\n\n return true\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'To import multiple Contacts' })\n async importContacts(\n @Arg('contacts', type => [ContactPatch]) contacts: ContactPatch[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n await Promise.all(\n contacts.map(async (contact: ContactPatch) => {\n const createdContact: Contact = await tx.getRepository(Contact).save({ domain, ...(await withCounterparty(tx, domain, contact)) })\n })\n )\n\n return true\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"contact-mutation.js","sourceRoot":"","sources":["../../../server/service/contact/contact-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Mutation, Arg, Ctx, Directive, UseMiddleware } from 'type-graphql'\nimport { In } from 'typeorm'\n\nimport { createAttachment, deleteAttachmentsByRef } from '@things-factory/attachment-base'\nimport { Refusal, SpeakRefusals } from '@things-factory/shell'\n\nimport { Contact } from './contact'\nimport { NewContact, ContactPatch } from './contact-type'\nimport { withCounterparty } from './contact-counterparty'\n\n@UseMiddleware(SpeakRefusals)\n@Resolver(Contact)\nexport class ContactMutation {\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Contact, { description: 'To create new Contact' })\n async createContact(@Arg('contact') contact: NewContact, @Ctx() context: ResolverContext): Promise<Contact> {\n const { domain, user, tx } = context.state\n const file = contact.profile?.file\n\n if (contact.profile) {\n const { left, top, zoom } = contact.profile\n contact.profile = { left, top, zoom }\n }\n\n const ContactRepository = tx.getRepository(Contact)\n\n const result = await ContactRepository.save({\n ...(await withCounterparty(tx, domain, contact)),\n domain,\n creator: user,\n updater: user\n })\n\n if (file) {\n await createAttachment(\n null,\n {\n attachment: {\n file,\n refType: Contact.name,\n refBy: result.id\n }\n },\n context\n )\n }\n\n return result\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Contact, { description: 'To modify Contact information' })\n async updateContact(\n @Arg('id') id: string,\n @Arg('patch') patch: ContactPatch,\n @Ctx() context: ResolverContext\n ): Promise<Contact> {\n const { domain, user, tx } = context.state\n const file = patch.profile?.file\n\n if (patch.profile) {\n const { left, top, zoom } = patch.profile\n patch.profile = { left, top, zoom } as any\n }\n\n const ContactRepository = tx.getRepository(Contact)\n\n const contact = await ContactRepository.findOne({\n where: { domain: { id: domain.id }, id }\n })\n\n const result = await ContactRepository.save({\n ...contact,\n ...(await withCounterparty(tx, domain, patch)),\n updater: user\n })\n\n if (file) {\n await deleteAttachmentsByRef(null, { refBys: [result.id] }, context)\n await createAttachment(\n null,\n {\n attachment: {\n file,\n refType: Contact.name,\n refBy: result.id\n }\n },\n context\n )\n }\n\n return result\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => [Contact], { description: \"To modify multiple Contacts' information\" })\n async updateMultipleContact(\n @Arg('patches', type => [ContactPatch]) patches: ContactPatch[],\n @Ctx() context: ResolverContext\n ): Promise<Contact[]> {\n const { domain, user, tx } = context.state\n\n let results = []\n const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')\n const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')\n const contactRepo = tx.getRepository(Contact)\n\n if (_createRecords.length > 0) {\n for (let i = 0; i < _createRecords.length; i++) {\n const newRecord = _createRecords[i]\n\n const result = await contactRepo.save({\n ...(await withCounterparty(tx, domain, newRecord)),\n domain,\n creator: user,\n updater: user\n })\n\n results.push({ ...result, cuFlag: '+' })\n }\n }\n\n if (_updateRecords.length > 0) {\n for (let i = 0; i < _updateRecords.length; i++) {\n const updateRecord = _updateRecords[i]\n const contact = await contactRepo.findOne({\n where: { domain: { id: domain.id }, id: updateRecord.id }\n })\n\n if (!contact) {\n throw new Refusal('contact-not-found', {}, `failed to find contact to update: ${updateRecord.id}`)\n }\n\n const result = await contactRepo.save({\n ...contact,\n ...(await withCounterparty(tx, domain, updateRecord)),\n updater: user\n })\n\n results.push({ ...result, cuFlag: 'M' })\n }\n }\n\n return results\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'To delete Contact' })\n async deleteContact(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(Contact).softDelete({ domain: { id: domain.id }, id })\n // await deleteAttachmentsByRef(null, { refBys: [id] }, context)\n\n return true\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'To delete multiple Contacts' })\n async deleteContacts(@Arg('ids', type => [String]) ids: string[], @Ctx() context: ResolverContext): Promise<boolean> {\n const { domain, tx } = context.state\n\n await tx.getRepository(Contact).softDelete({\n domain: { id: domain.id },\n id: In(ids)\n })\n\n // await deleteAttachmentsByRef(null, { refBys: ids }, context)\n\n return true\n }\n\n @Directive('@transaction')\n @Directive('@privilege(category: \"contact\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Boolean, { description: 'To import multiple Contacts' })\n async importContacts(\n @Arg('contacts', type => [ContactPatch]) contacts: ContactPatch[],\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx } = context.state\n\n await Promise.all(\n contacts.map(async (contact: ContactPatch) => {\n const createdContact: Contact = await tx.getRepository(Contact).save({ domain, ...(await withCounterparty(tx, domain, contact)) })\n })\n )\n\n return true\n }\n}\n"]}
|