@things-factory/setting-base 8.0.5 → 9.0.0-beta.12

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/setting-base",
3
- "version": "8.0.5",
3
+ "version": "9.0.0-beta.12",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "dist-client/index.js",
6
6
  "things-factory": true,
@@ -27,8 +27,8 @@
27
27
  "migration:create": "node ../../node_modules/typeorm/cli.js migration:create ./server/migrations/migration"
28
28
  },
29
29
  "dependencies": {
30
- "@things-factory/auth-base": "^8.0.5",
31
- "@things-factory/code-base": "^8.0.5"
30
+ "@things-factory/auth-base": "^9.0.0-beta.12",
31
+ "@things-factory/code-base": "^9.0.0-beta.12"
32
32
  },
33
- "gitHead": "9ab6fca18eeb58b9d2f3411661508a39d0ab6aee"
33
+ "gitHead": "5e9ade1c2d4b4c96b89396e36c3afa1caaf18ef0"
34
34
  }
@@ -1,3 +0,0 @@
1
- export const ADD_SETTING = 'ADD_SETTING'
2
- export const REMOVE_SETTING = 'REMOVE_SETTING'
3
- export const ADD_REFRESH_HANDLER = 'ADD_REFRESH_HANDLER'
@@ -1,8 +0,0 @@
1
- import { store } from '@operato/shell'
2
- import setting from './reducers/setting'
3
-
4
- export default function bootstrap() {
5
- store.addReducers({
6
- setting
7
- })
8
- }
package/client/index.ts DELETED
@@ -1,2 +0,0 @@
1
- export * from './actions/setting'
2
- export * from './layout/settinglet'
@@ -1,43 +0,0 @@
1
- import { LitElement, html, css } from 'lit'
2
- import { customElement, query, state } from 'lit/decorators.js'
3
-
4
- @customElement('setting-let')
5
- export class SettingLet extends LitElement {
6
- static styles = [
7
- css`
8
- :host {
9
- display: block;
10
- margin: var(--setting-let-margin);
11
- padding: var(--setting-content-padding);
12
- background-color: var(--md-sys-color-on-primary);
13
- border-radius: var(--setting-let-border-radius);
14
- border: var(--setting-let-border);
15
- text-transform: capitalize;
16
- }
17
-
18
- slot {
19
- display: block;
20
- }
21
- slot[name='title'] {
22
- margin-bottom: var(--spacing-medium);
23
- border-bottom: 1px dotted rgba(var(--md-sys-color-primary), 0.5);
24
- }
25
- slot[name='title']::slotted(*) {
26
- color: var(--md-sys-color-primary);
27
- font: var(--setting-title-font);
28
- }
29
-
30
- slot[name='content']::slotted(*) {
31
- color: var(--md-sys-color-on-surface);
32
- font: var(--setting-content-font);
33
- }
34
- `
35
- ]
36
-
37
- render() {
38
- return html`
39
- <slot name="title"></slot>
40
- <slot name="content"></slot>
41
- `
42
- }
43
- }
@@ -1,33 +0,0 @@
1
- import { ADD_SETTING, REMOVE_SETTING, ADD_REFRESH_HANDLER } from '../actions/setting'
2
-
3
- const INITIAL_STATE = {
4
- settings: [],
5
- refreshHandlers: []
6
- }
7
-
8
- const setting = (state = INITIAL_STATE, action) => {
9
- switch (action.type) {
10
- case ADD_SETTING:
11
- return {
12
- ...state,
13
- settings: [...state.settings, action.setting]
14
- }
15
-
16
- case REMOVE_SETTING:
17
- return {
18
- ...state,
19
- settings: state.settings.filter(i => i !== action.setting)
20
- }
21
-
22
- case ADD_REFRESH_HANDLER:
23
- return {
24
- ...state,
25
- refreshHandlers: [...state.refreshHandlers, action.refreshHandler]
26
- }
27
-
28
- default:
29
- return state
30
- }
31
- }
32
-
33
- export default setting
package/server/index.ts DELETED
@@ -1,2 +0,0 @@
1
- export * from './service'
2
- export * from './migrations'
@@ -1,9 +0,0 @@
1
- const glob = require('glob')
2
- const path = require('path')
3
-
4
- export var migrations = []
5
-
6
- glob.sync(path.resolve(__dirname, '.', '**', '*.js')).forEach(function(file) {
7
- if (file.indexOf('index.js') !== -1) return
8
- migrations = migrations.concat(Object.values(require(path.resolve(file))) || [])
9
- })
@@ -1,25 +0,0 @@
1
- /* IMPORT ENTITIES AND RESOLVERS */
2
- import { entities as PartnerSettingEntities, resolvers as PartnerSettingResolvers } from './partner-setting'
3
- import { entities as SettingEntities, resolvers as SettingResolvers } from './setting'
4
-
5
- /* EXPORT ENTITY TYPES */
6
- export * from './partner-setting/partner-setting'
7
- export * from './setting/setting'
8
-
9
- /* EXPORT TYPES */
10
- export * from './partner-setting/partner-setting-type'
11
- export * from './setting/setting-type'
12
-
13
- export const entities = [
14
- /* ENTITIES */
15
- ...PartnerSettingEntities,
16
- ...SettingEntities
17
- ]
18
-
19
- export const schema = {
20
- resolverClasses: [
21
- /* RESOLVER CLASSES */
22
- ...PartnerSettingResolvers,
23
- ...SettingResolvers
24
- ]
25
- }
@@ -1,6 +0,0 @@
1
- import { PartnerSetting } from './partner-setting'
2
- import { PartnerSettingQuery } from './partner-setting-query'
3
- import { PartnerSettingMutation } from './partner-setting-mutation'
4
-
5
- export const entities = [PartnerSetting]
6
- export const resolvers = [PartnerSettingQuery, PartnerSettingMutation]
@@ -1,98 +0,0 @@
1
- import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
2
- import { In, Repository } from 'typeorm'
3
-
4
- import { Domain, getRepository } from '@things-factory/shell'
5
-
6
- import { Setting } from '../setting/setting'
7
- import { PartnerSetting } from './partner-setting'
8
- import { PartnerSettingPatch } from './partner-setting-type'
9
-
10
- @Resolver(PartnerSetting)
11
- export class PartnerSettingMutation {
12
- @Directive('@transaction')
13
- @Mutation(returns => [PartnerSetting], { description: "To modify multiple PartnerSettings' information" })
14
- async updateMultiplePartnerSetting(
15
- @Arg('patches', type => [PartnerSettingPatch]) patches: PartnerSettingPatch[],
16
- @Ctx() context: ResolverContext
17
- ): Promise<PartnerSetting[]> {
18
- const { tx, domain, user } = context.state
19
- const partnerSettingRepo: Repository<PartnerSetting> =
20
- tx?.getRepository(PartnerSetting) || getRepository(PartnerSetting)
21
- const domainRepo: Repository<Domain> = tx?.getRepository(Domain) || getRepository(Domain)
22
- const settingRepo: Repository<Setting> = tx?.getRepository(Setting) || getRepository(Setting)
23
-
24
- const { createRecords, updateRecords } = patches.reduce(
25
- (records, patch) => {
26
- if (patch.cuFlag === '+') records.createRecords.push(patch)
27
- if (patch.cuFlag.toUpperCase() === 'M') records.updateRecords.push(patch)
28
-
29
- return records
30
- },
31
- { createRecords: [], updateRecords: [] }
32
- )
33
-
34
- let results: PartnerSetting[] = []
35
-
36
- if (createRecords?.length) {
37
- await Promise.all(
38
- createRecords.map(async (record: PartnerSetting) => {
39
- const partnerDomain: Domain = await domainRepo.findOneBy({ id: record.partnerDomain.id })
40
- const setting: Setting = await settingRepo.findOneBy({ id: record.setting.id })
41
-
42
- const result: PartnerSetting = await partnerSettingRepo.save({
43
- domain,
44
- creator: user,
45
- updater: user,
46
- ...record,
47
- name: setting.name,
48
- description: setting.description,
49
- category: setting.category,
50
- partnerDomain,
51
- setting
52
- })
53
-
54
- results.push(result)
55
- })
56
- )
57
- }
58
-
59
- if (updateRecords?.length) {
60
- await Promise.all(
61
- updateRecords.map(async (record: PartnerSetting) => {
62
- const partnerDomain: Domain = await domainRepo.findOneBy({ id: record.partnerDomain.id })
63
- const setting: Setting = await settingRepo.findOneBy({ id: record.setting.id })
64
-
65
- const partnerSetting: PartnerSetting = await partnerSettingRepo.findOneBy({ id: setting.id })
66
- if (!record.id) throw new Error('Cannot update record without its ID')
67
-
68
- const result = await partnerSettingRepo.save({
69
- ...partnerSetting,
70
- ...record,
71
- name: setting.name,
72
- description: setting.description,
73
- category: setting.category,
74
- updater: user,
75
- partnerDomain,
76
- setting
77
- })
78
-
79
- results.push(result)
80
- })
81
- )
82
- }
83
-
84
- return results
85
- }
86
-
87
- @Directive('@transaction')
88
- @Mutation(returns => Boolean, { description: 'To delete multiple partnerSettings' })
89
- async deletePartnerSettings(
90
- @Arg('ids', type => [String]) ids: string[],
91
- @Ctx() context: ResolverContext
92
- ): Promise<boolean> {
93
- const { domain, tx } = context.state
94
-
95
- await tx.getRepository(PartnerSetting).delete({ id: In(ids), domain: { id: domain.id } })
96
- return true
97
- }
98
- }
@@ -1,123 +0,0 @@
1
- import { Arg, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'
2
- import { SelectQueryBuilder } from 'typeorm'
3
-
4
- import { User } from '@things-factory/auth-base'
5
- import {
6
- Domain,
7
- Filter,
8
- getRepository,
9
- ObjectRef,
10
- Pagination,
11
- Sorting,
12
- getQueryBuilderFromListParams
13
- } from '@things-factory/shell'
14
-
15
- import { Setting } from '../setting/setting'
16
- import { PartnerSetting } from './partner-setting'
17
- import { PartnerSettingList } from './partner-setting-type'
18
-
19
- @Resolver(PartnerSetting)
20
- export class PartnerSettingQuery {
21
- @Query(returns => PartnerSetting, { description: 'To fetch a PartnerSetting' })
22
- async partnerSetting(
23
- @Arg('name') name: string,
24
- @Arg('partnerDomainId') partnerDomainId: string,
25
- @Ctx() context: ResolverContext
26
- ): Promise<PartnerSetting> {
27
- const { domain } = context.state
28
- const setting: Setting = await getRepository(Setting).findOne({ where: { domain: { id: domain.id }, name } })
29
-
30
- const partnerSetting: PartnerSetting = await getRepository(PartnerSetting).findOne({
31
- where: { domain: { id: domain.id }, setting: { id: setting.id }, partnerDomain: { id: partnerDomainId } }
32
- })
33
-
34
- if (!partnerSetting) throw new Error(`${name} setting is not found`)
35
-
36
- return partnerSetting || (setting as PartnerSetting)
37
- }
38
-
39
- @Query(returns => PartnerSettingList, { description: 'To fetch multiple PartnerSettings' })
40
- async partnerSettings(
41
- @Arg('filters', type => [Filter]) filters: Filter[],
42
- @Arg('pagination', type => Pagination) pagination: Pagination,
43
- @Arg('sortings', type => [Sorting]) sortings: Sorting[],
44
- @Arg('partnerDomain', type => ObjectRef) partnerDomain: ObjectRef,
45
- @Ctx() context: ResolverContext
46
- ): Promise<PartnerSettingList> {
47
- const { domain } = context.state
48
- const qb: SelectQueryBuilder<PartnerSetting> = await getQueryBuilderFromListParams({
49
- repository: getRepository(PartnerSetting),
50
- alias: 'ps',
51
- params: { filters, pagination, sortings },
52
- domain,
53
- searchables: ['name', 'description'],
54
- filtersMap: {
55
- name: {
56
- relationColumn: 'setting',
57
- columnName: 'name'
58
- },
59
- description: {
60
- relationColumn: 'setting',
61
- columnName: 'description'
62
- }
63
- }
64
- })
65
-
66
- qb.leftJoinAndSelect('ps.setting', 'Setting').andWhere('ps.partner_domain_id = :partnerDomainId', {
67
- partnerDomainId: partnerDomain.id
68
- })
69
- const [items, total] = await qb.getManyAndCount()
70
-
71
- return { items, total }
72
- }
73
-
74
- @FieldResolver(type => Domain)
75
- async partnerDomain(@Root() partnerSetting: PartnerSetting): Promise<Domain> {
76
- return await getRepository(Domain).findOneBy({ id: partnerSetting.partnerDomainId })
77
- }
78
-
79
- @FieldResolver(type => Setting)
80
- async setting(@Root() partnerSetting: PartnerSetting): Promise<Setting> {
81
- return await getRepository(Setting).findOneBy({ id: partnerSetting.settingId })
82
- }
83
-
84
- @FieldResolver(type => String)
85
- async name(@Root() partnerSetting: PartnerSetting): Promise<string> {
86
- if (partnerSetting.setting?.name) {
87
- return partnerSetting.setting.name
88
- }
89
-
90
- return (await getRepository(Setting).findOneBy({ id: partnerSetting.settingId }))?.name
91
- }
92
-
93
- async description(@Root() partnerSetting: PartnerSetting): Promise<string> {
94
- if (partnerSetting.setting?.description) {
95
- return partnerSetting.setting.description
96
- }
97
-
98
- return (await getRepository(Setting).findOneBy({ id: partnerSetting.settingId }))?.description
99
- }
100
-
101
- async category(@Root() partnerSetting: PartnerSetting): Promise<string> {
102
- if (partnerSetting.setting?.category) {
103
- return partnerSetting.setting.category
104
- }
105
-
106
- return (await getRepository(Setting).findOneBy({ id: partnerSetting.settingId }))?.category
107
- }
108
-
109
- @FieldResolver(type => Domain)
110
- async domain(@Root() partnerSetting: PartnerSetting): Promise<Domain> {
111
- return await getRepository(Domain).findOneBy({ id: partnerSetting.domainId })
112
- }
113
-
114
- @FieldResolver(type => User)
115
- async updater(@Root() partnerSetting: PartnerSetting): Promise<User> {
116
- return await getRepository(User).findOneBy({ id: partnerSetting.updaterId })
117
- }
118
-
119
- @FieldResolver(type => User)
120
- async creator(@Root() partnerSetting: PartnerSetting): Promise<User> {
121
- return await getRepository(User).findOneBy({ id: partnerSetting.creatorId })
122
- }
123
- }
@@ -1,42 +0,0 @@
1
- import { ObjectType, Field, InputType, Int, ID, registerEnumType } from 'type-graphql'
2
- import { ObjectRef } from '@things-factory/shell'
3
- import { PartnerSetting } from './partner-setting'
4
-
5
- @InputType()
6
- export class NewPartnerSetting {
7
- @Field(type => ObjectRef)
8
- partnerDomain: ObjectRef
9
-
10
- @Field(type => ObjectRef, { nullable: true })
11
- setting: ObjectRef
12
-
13
- @Field({ nullable: true })
14
- value?: string
15
- }
16
-
17
- @InputType()
18
- export class PartnerSettingPatch {
19
- @Field(type => ID, { nullable: true })
20
- id?: string
21
-
22
- @Field(type => ObjectRef, { nullable: true })
23
- partnerDomain: ObjectRef
24
-
25
- @Field(type => ObjectRef, { nullable: true })
26
- setting: ObjectRef
27
-
28
- @Field({ nullable: true })
29
- value?: string
30
-
31
- @Field()
32
- cuFlag: string
33
- }
34
-
35
- @ObjectType()
36
- export class PartnerSettingList {
37
- @Field(type => [PartnerSetting])
38
- items: PartnerSetting[]
39
-
40
- @Field(type => Int)
41
- total: number
42
- }
@@ -1,109 +0,0 @@
1
- import { Field, ID, ObjectType } from 'type-graphql'
2
- import {
3
- Column,
4
- CreateDateColumn,
5
- Entity,
6
- EntityManager,
7
- getRepository,
8
- Index,
9
- ManyToOne,
10
- PrimaryGeneratedColumn,
11
- RelationId,
12
- Repository,
13
- UpdateDateColumn
14
- } from 'typeorm'
15
-
16
- import { User } from '@things-factory/auth-base'
17
- import { Domain } from '@things-factory/shell'
18
-
19
- import { Setting } from '../setting/setting'
20
-
21
- @Entity()
22
- @Index(
23
- 'ix_partner_setting_0',
24
- partnerSetting => [partnerSetting.domain, partnerSetting.partnerDomain, partnerSetting.setting],
25
- { unique: true }
26
- )
27
- @ObjectType({ description: 'Entity for PartnerSetting' })
28
- export class PartnerSetting {
29
- @PrimaryGeneratedColumn('uuid')
30
- @Field(type => ID)
31
- readonly id: string
32
-
33
- @ManyToOne(type => Domain)
34
- @Field(type => Domain)
35
- domain?: Domain
36
-
37
- @RelationId((partnerSetting: PartnerSetting) => partnerSetting.domain)
38
- domainId?: string
39
-
40
- @ManyToOne(type => Domain, { nullable: false })
41
- @Field(type => Domain, { nullable: true })
42
- partnerDomain: Domain
43
-
44
- @RelationId((partnerSetting: PartnerSetting) => partnerSetting.partnerDomain)
45
- @Field({ nullable: true })
46
- partnerDomainId?: string
47
-
48
- @ManyToOne(type => Setting)
49
- @Field({ nullable: true })
50
- setting: Setting
51
-
52
- @RelationId((partnerSetting: PartnerSetting) => partnerSetting.setting)
53
- @Field({ nullable: true })
54
- settingId?: string
55
-
56
- @Column({
57
- nullable: true
58
- })
59
- @Field({ nullable: true })
60
- value?: string
61
-
62
- @Field({ nullable: true })
63
- name?: string
64
-
65
- @Field({ nullable: true })
66
- description?: string
67
-
68
- @Field({ nullable: true })
69
- category?: string
70
-
71
- @CreateDateColumn()
72
- @Field({ nullable: true })
73
- createdAt?: Date
74
-
75
- @UpdateDateColumn()
76
- @Field({ nullable: true })
77
- updatedAt?: Date
78
-
79
- @ManyToOne(type => User, { nullable: true })
80
- @Field(type => User, { nullable: true })
81
- creator?: User
82
-
83
- @RelationId((partnerSetting: PartnerSetting) => partnerSetting.creator)
84
- creatorId?: string
85
-
86
- @ManyToOne(type => User, { nullable: true })
87
- @Field(type => User, { nullable: true })
88
- updater?: User
89
-
90
- @RelationId((partnerSetting: PartnerSetting) => partnerSetting.updater)
91
- updaterId?: string
92
-
93
- static async get(domain: Domain, partnerDomain: Domain, name: string, tx?: EntityManager): Promise<string> {
94
- const partnerSettingRepo: Repository<PartnerSetting> =
95
- tx?.getRepository(PartnerSetting) || getRepository(PartnerSetting)
96
- const settingRepo: Repository<Setting> = tx?.getRepository(Setting) || getRepository(Setting)
97
- const setting: Setting = await settingRepo.findOneBy({ domain: { id: domain.id }, name })
98
-
99
- if (!setting) throw new Error(`No setting found has '${name}' as its name`)
100
-
101
- const domainSetting: PartnerSetting = await partnerSettingRepo.findOneBy({
102
- domain: { id: domain.id },
103
- partnerDomain: { id: partnerDomain.id },
104
- setting: { id: setting.id }
105
- })
106
-
107
- return domainSetting?.value || setting?.value
108
- }
109
- }
@@ -1,6 +0,0 @@
1
- import { Setting } from './setting'
2
- import { SettingQuery } from './setting-query'
3
- import { SettingMutation } from './setting-mutation'
4
-
5
- export const entities = [Setting]
6
- export const resolvers = [SettingQuery, SettingMutation]
@@ -1,118 +0,0 @@
1
- import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
2
- import { In } from 'typeorm'
3
-
4
- import { Setting } from './setting'
5
- import { NewSetting, SettingPatch } from './setting-type'
6
-
7
- @Resolver(Setting)
8
- export class SettingMutation {
9
- @Directive('@transaction')
10
- @Directive('@privilege(category: "setting", privilege: "mutation")')
11
- @Mutation(returns => Setting, { description: 'To create new Setting' })
12
- async createSetting(@Arg('setting') setting: NewSetting, @Ctx() context: ResolverContext): Promise<Setting> {
13
- const { tx, domain, user } = context.state
14
- return await tx.getRepository(Setting).save({
15
- domain,
16
- ...setting,
17
- creator: user,
18
- updater: user
19
- })
20
- }
21
-
22
- @Directive('@transaction')
23
- @Directive('@privilege(category: "setting", privilege: "mutation")')
24
- @Mutation(returns => Setting, { description: 'To modify Setting information' })
25
- async updateSetting(
26
- @Arg('name') name: string,
27
- @Arg('patch') patch: SettingPatch,
28
- @Ctx() context: ResolverContext
29
- ): Promise<Setting> {
30
- const { tx, domain, user } = context.state
31
-
32
- const repository = tx.getRepository(Setting)
33
- const setting = await repository.findOneBy({ domain: { id: domain.id }, name })
34
-
35
- return await repository.save({
36
- name,
37
- creater: user,
38
- ...setting,
39
- ...patch,
40
- domain,
41
- updater: user
42
- })
43
- }
44
-
45
- @Directive('@transaction')
46
- @Directive('@privilege(category: "setting", privilege: "mutation")')
47
- @Mutation(returns => [Setting], { description: "To modify multiple Settings' information" })
48
- async updateMultipleSetting(
49
- @Arg('patches', type => [SettingPatch]) patches: SettingPatch[],
50
- @Ctx() context: ResolverContext
51
- ): Promise<Setting[]> {
52
- const { tx, domain, user } = context.state
53
-
54
- let results = []
55
- const _createRecords = patches.filter((patch: any) => patch.cuFlag === '+')
56
- const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
57
- const settingRepo = tx.getRepository(Setting)
58
-
59
- if (_createRecords.length > 0) {
60
- for (let i = 0; i < _createRecords.length; i++) {
61
- const newRecord = _createRecords[i]
62
-
63
- const result = await settingRepo.save({
64
- domain: { id: domain.id },
65
- creator: user,
66
- updater: user,
67
- ...newRecord
68
- })
69
-
70
- results.push({ ...result, cuFlag: '+' })
71
- }
72
- }
73
-
74
- if (_updateRecords.length > 0) {
75
- for (let i = 0; i < _updateRecords.length; i++) {
76
- const newRecord = _updateRecords[i]
77
- const setting = await settingRepo.findOneBy({ id: newRecord.id })
78
-
79
- const result = await settingRepo.save({
80
- ...setting,
81
- ...newRecord,
82
- updater: user
83
- })
84
-
85
- results.push({ ...result, cuFlag: 'M' })
86
- }
87
- }
88
-
89
- return results
90
- }
91
-
92
- @Directive('@transaction')
93
- @Directive('@privilege(category: "setting", privilege: "mutation")')
94
- @Mutation(returns => Boolean, { description: 'To delete Setting' })
95
- async deleteSetting(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<boolean> {
96
- const { tx, domain } = context.state
97
-
98
- await tx.getRepository(Setting).delete({ domain: { id: domain.id }, name })
99
- return true
100
- }
101
-
102
- @Directive('@transaction')
103
- @Directive('@privilege(category: "setting", privilege: "mutation")')
104
- @Mutation(returns => Boolean, { description: 'To delete multiple settings' })
105
- async deleteSettings(
106
- @Arg('names', type => [String]) names: string[],
107
- @Ctx() context: ResolverContext
108
- ): Promise<boolean> {
109
- const { tx, domain } = context.state
110
-
111
- await tx.getRepository(Setting).delete({
112
- domain: { id: domain.id },
113
- name: In(names)
114
- })
115
-
116
- return true
117
- }
118
- }