@things-factory/contact 10.1.141 → 10.1.145

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.
@@ -36,7 +36,8 @@ let ContactQuery = class ContactQuery {
36
36
  domain,
37
37
  params,
38
38
  repository: await (0, shell_1.getRepository)(contact_1.Contact),
39
- searchables: ['name', 'counterparty', 'email', 'phone'],
39
+ /* A work email or phone is one of the contact's items, not a column of its own: the items are searched. */
40
+ searchables: ['name', 'counterparty', 'items'],
40
41
  /* A search by counterparty is a search by the name of the counterparty the contact belongs to. */
41
42
  filtersMap: { counterparty: { columnName: 'name', relationColumn: 'counterparty' } }
42
43
  });
@@ -92,6 +93,7 @@ let ContactQuery = class ContactQuery {
92
93
  };
93
94
  exports.ContactQuery = ContactQuery;
94
95
  tslib_1.__decorate([
96
+ (0, type_graphql_1.Directive)('@privilege(category: "contact", privilege: "query", domainOwnerGranted: true)'),
95
97
  (0, type_graphql_1.Query)(returns => contact_1.Contact, { nullable: true, description: 'To fetch a Contact' }),
96
98
  tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
97
99
  tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
@@ -100,6 +102,7 @@ tslib_1.__decorate([
100
102
  tslib_1.__metadata("design:returntype", Promise)
101
103
  ], ContactQuery.prototype, "contact", null);
102
104
  tslib_1.__decorate([
105
+ (0, type_graphql_1.Directive)('@privilege(category: "contact", privilege: "query", domainOwnerGranted: true)'),
103
106
  (0, type_graphql_1.Query)(returns => contact_type_1.ContactList, { description: 'To fetch multiple Contacts' }),
104
107
  tslib_1.__param(0, (0, type_graphql_1.Args)(type => shell_1.ListParam)),
105
108
  tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
@@ -1 +1 @@
1
- {"version":3,"file":"contact-query.js","sourceRoot":"","sources":["../../../server/service/contact/contact-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx } from 'type-graphql'\nimport { GraphQLEmailAddress } from 'graphql-scalars'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { Counterparty } from '@things-factory/biz-base'\nimport { Attachment } from '@things-factory/attachment-base'\nimport { Contact, ContactField } from './contact'\nimport { ContactItem } from './contact-item'\nimport { Profile } from './profile'\nimport { ContactList } from './contact-type'\n\nfunction getContactItems(contact: Contact) {\n const { items } = contact\n\n if (!items || !(items instanceof Array)) {\n return []\n }\n\n return items\n}\n\nfunction getContactItem(contact: Contact, type: String, label: String) {\n const { items } = contact\n\n return items?.find(item => item.type === type && item.label === label)?.value\n}\n\n@Resolver(Contact)\nexport class ContactQuery {\n @Query(returns => Contact!, { nullable: true, description: 'To fetch a Contact' })\n async contact(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Contact> {\n const { domain } = context.state\n\n return await getRepository(Contact).findOne({\n where: { domain: { id: domain.id }, id }\n })\n }\n\n @Query(returns => ContactList, { description: 'To fetch multiple Contacts' })\n async contacts(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<ContactList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: await getRepository(Contact),\n searchables: ['name', 'counterparty', 'email', 'phone'],\n /* A search by counterparty is a search by the name of the counterparty the contact belongs to. */\n filtersMap: { counterparty: { columnName: 'name', relationColumn: 'counterparty' } }\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => Profile)\n async profile(@Root() contact: Contact): Promise<Profile> {\n var { left, top, zoom } = contact.profile || {}\n\n if (left === undefined || top === undefined || zoom === undefined) {\n return\n }\n\n const attachment: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain: { id: contact.domainId },\n refType: Contact.name,\n refBy: contact.id\n }\n })\n\n return { left, top, zoom, picture: attachment?.fullpath }\n }\n\n /* A counterparty deleted since is still the one the contact belonged to: it is read with the deleted ones. */\n @FieldResolver(type => Counterparty, { nullable: true })\n async counterparty(@Root() contact: Contact): Promise<Counterparty | null> {\n if (contact.counterparty !== undefined) return contact.counterparty\n if (!contact.counterpartyId) return null\n return await getRepository(Counterparty).findOne({ where: { id: contact.counterpartyId, domain: { id: contact.domainId } } as any, withDeleted: true })\n }\n\n @FieldResolver(type => String, { nullable: true })\n async phone(@Root() contact: Contact): Promise<string> {\n return getContactItem(contact, ContactField.Phone, 'work')\n }\n\n @FieldResolver(type => GraphQLEmailAddress, { nullable: true })\n async email(@Root() contact: Contact): Promise<string> {\n return getContactItem(contact, ContactField.Email, 'work')\n }\n\n @FieldResolver(type => String, { nullable: true })\n async address(@Root() contact: Contact): Promise<string> {\n return getContactItem(contact, ContactField.Address, 'work')\n }\n\n @FieldResolver(type => String, { nullable: true })\n async department(@Root() contact: Contact): Promise<string> {\n return getContactItem(contact, ContactField.Department, 'work')\n }\n\n @FieldResolver(type => [ContactItem])\n async items(@Root() contact: Contact): Promise<ContactItem[]> {\n return getContactItems(contact)\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() contact: Contact): Promise<Domain> {\n return await getRepository(Domain).findOneBy({ id: contact.domainId })\n }\n\n @FieldResolver(type => User)\n async updater(@Root() contact: Contact): Promise<User> {\n return await getRepository(User).findOneBy({ id: contact.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() contact: Contact): Promise<User> {\n return await getRepository(User).findOneBy({ id: contact.creatorId })\n }\n}\n"]}
1
+ {"version":3,"file":"contact-query.js","sourceRoot":"","sources":["../../../server/service/contact/contact-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx, Directive } from 'type-graphql'\nimport { GraphQLEmailAddress } from 'graphql-scalars'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { Counterparty } from '@things-factory/biz-base'\nimport { Attachment } from '@things-factory/attachment-base'\nimport { Contact, ContactField } from './contact'\nimport { ContactItem } from './contact-item'\nimport { Profile } from './profile'\nimport { ContactList } from './contact-type'\n\nfunction getContactItems(contact: Contact) {\n const { items } = contact\n\n if (!items || !(items instanceof Array)) {\n return []\n }\n\n return items\n}\n\nfunction getContactItem(contact: Contact, type: String, label: String) {\n const { items } = contact\n\n return items?.find(item => item.type === type && item.label === label)?.value\n}\n\n@Resolver(Contact)\nexport class ContactQuery {\n @Directive('@privilege(category: \"contact\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => Contact!, { nullable: true, description: 'To fetch a Contact' })\n async contact(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Contact> {\n const { domain } = context.state\n\n return await getRepository(Contact).findOne({\n where: { domain: { id: domain.id }, id }\n })\n }\n\n @Directive('@privilege(category: \"contact\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => ContactList, { description: 'To fetch multiple Contacts' })\n async contacts(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<ContactList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\n params,\n repository: await getRepository(Contact),\n /* A work email or phone is one of the contact's items, not a column of its own: the items are searched. */\n searchables: ['name', 'counterparty', 'items'],\n /* A search by counterparty is a search by the name of the counterparty the contact belongs to. */\n filtersMap: { counterparty: { columnName: 'name', relationColumn: 'counterparty' } }\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => Profile)\n async profile(@Root() contact: Contact): Promise<Profile> {\n var { left, top, zoom } = contact.profile || {}\n\n if (left === undefined || top === undefined || zoom === undefined) {\n return\n }\n\n const attachment: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain: { id: contact.domainId },\n refType: Contact.name,\n refBy: contact.id\n }\n })\n\n return { left, top, zoom, picture: attachment?.fullpath }\n }\n\n /* A counterparty deleted since is still the one the contact belonged to: it is read with the deleted ones. */\n @FieldResolver(type => Counterparty, { nullable: true })\n async counterparty(@Root() contact: Contact): Promise<Counterparty | null> {\n if (contact.counterparty !== undefined) return contact.counterparty\n if (!contact.counterpartyId) return null\n return await getRepository(Counterparty).findOne({ where: { id: contact.counterpartyId, domain: { id: contact.domainId } } as any, withDeleted: true })\n }\n\n @FieldResolver(type => String, { nullable: true })\n async phone(@Root() contact: Contact): Promise<string> {\n return getContactItem(contact, ContactField.Phone, 'work')\n }\n\n @FieldResolver(type => GraphQLEmailAddress, { nullable: true })\n async email(@Root() contact: Contact): Promise<string> {\n return getContactItem(contact, ContactField.Email, 'work')\n }\n\n @FieldResolver(type => String, { nullable: true })\n async address(@Root() contact: Contact): Promise<string> {\n return getContactItem(contact, ContactField.Address, 'work')\n }\n\n @FieldResolver(type => String, { nullable: true })\n async department(@Root() contact: Contact): Promise<string> {\n return getContactItem(contact, ContactField.Department, 'work')\n }\n\n @FieldResolver(type => [ContactItem])\n async items(@Root() contact: Contact): Promise<ContactItem[]> {\n return getContactItems(contact)\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() contact: Contact): Promise<Domain> {\n return await getRepository(Domain).findOneBy({ id: contact.domainId })\n }\n\n @FieldResolver(type => User)\n async updater(@Root() contact: Contact): Promise<User> {\n return await getRepository(User).findOneBy({ id: contact.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() contact: Contact): Promise<User> {\n return await getRepository(User).findOneBy({ id: contact.creatorId })\n }\n}\n"]}
@@ -2,5 +2,5 @@ import { Contact } from './contact';
2
2
  import { Profile } from './profile';
3
3
  import { ContactQuery } from './contact-query';
4
4
  import { ContactMutation } from './contact-mutation';
5
- export declare const entities: (typeof Contact | typeof Profile)[];
6
- export declare const resolvers: (typeof ContactMutation | typeof ContactQuery)[];
5
+ export declare const entities: (typeof Profile | typeof Contact)[];
6
+ export declare const resolvers: (typeof ContactQuery | typeof ContactMutation)[];
@@ -1,8 +1,8 @@
1
1
  export * from './contact/profile';
2
2
  export * from './contact/contact-item';
3
3
  export * from './contact/contact';
4
- export declare const entities: (typeof import("./contact/contact").Contact | typeof import("./contact/profile").Profile)[];
4
+ export declare const entities: (typeof import("./contact/profile").Profile | typeof import("./contact/contact").Contact)[];
5
5
  export declare const subscribers: any[];
6
6
  export declare const schema: {
7
- resolverClasses: (typeof import("./contact/contact-mutation").ContactMutation | typeof import("./contact/contact-query").ContactQuery)[];
7
+ resolverClasses: (typeof import("./contact/contact-query").ContactQuery | typeof import("./contact/contact-mutation").ContactMutation)[];
8
8
  };