@things-factory/organization 6.0.0-zeta.26

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.
Files changed (112) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/assets/images/hatiolab-logo.png +0 -0
  3. package/client/bootstrap.ts +1 -0
  4. package/client/index.ts +0 -0
  5. package/client/pages/department/department-importer.ts +97 -0
  6. package/client/pages/department/department-list-page.ts +348 -0
  7. package/client/pages/employee/employee-importer.ts +97 -0
  8. package/client/pages/employee/employee-list-page.ts +348 -0
  9. package/client/pages/main.ts +25 -0
  10. package/client/route.ts +11 -0
  11. package/client/tsconfig.json +11 -0
  12. package/dist-client/actions/main.d.ts +1 -0
  13. package/dist-client/actions/main.js +2 -0
  14. package/dist-client/actions/main.js.map +1 -0
  15. package/dist-client/bootstrap.d.ts +1 -0
  16. package/dist-client/bootstrap.js +2 -0
  17. package/dist-client/bootstrap.js.map +1 -0
  18. package/dist-client/index.d.ts +0 -0
  19. package/dist-client/index.js +2 -0
  20. package/dist-client/index.js.map +1 -0
  21. package/dist-client/pages/department/department-importer.d.ts +22 -0
  22. package/dist-client/pages/department/department-importer.js +100 -0
  23. package/dist-client/pages/department/department-importer.js.map +1 -0
  24. package/dist-client/pages/department/department-list-page.d.ts +62 -0
  25. package/dist-client/pages/department/department-list-page.js +326 -0
  26. package/dist-client/pages/department/department-list-page.js.map +1 -0
  27. package/dist-client/pages/employee/employee-importer.d.ts +22 -0
  28. package/dist-client/pages/employee/employee-importer.js +100 -0
  29. package/dist-client/pages/employee/employee-importer.js.map +1 -0
  30. package/dist-client/pages/employee/employee-list-page.d.ts +62 -0
  31. package/dist-client/pages/employee/employee-list-page.js +326 -0
  32. package/dist-client/pages/employee/employee-list-page.js.map +1 -0
  33. package/dist-client/pages/main.d.ts +1 -0
  34. package/dist-client/pages/main.js +27 -0
  35. package/dist-client/pages/main.js.map +1 -0
  36. package/dist-client/reducers/main.d.ts +6 -0
  37. package/dist-client/reducers/main.js +14 -0
  38. package/dist-client/reducers/main.js.map +1 -0
  39. package/dist-client/route.d.ts +1 -0
  40. package/dist-client/route.js +11 -0
  41. package/dist-client/route.js.map +1 -0
  42. package/dist-client/tsconfig.tsbuildinfo +1 -0
  43. package/dist-server/controllers/index.js +1 -0
  44. package/dist-server/controllers/index.js.map +1 -0
  45. package/dist-server/index.js +7 -0
  46. package/dist-server/index.js.map +1 -0
  47. package/dist-server/middlewares/index.js +8 -0
  48. package/dist-server/middlewares/index.js.map +1 -0
  49. package/dist-server/migrations/index.js +12 -0
  50. package/dist-server/migrations/index.js.map +1 -0
  51. package/dist-server/routes.js +25 -0
  52. package/dist-server/routes.js.map +1 -0
  53. package/dist-server/service/department/department-history.js +156 -0
  54. package/dist-server/service/department/department-history.js.map +1 -0
  55. package/dist-server/service/department/department-mutation.js +168 -0
  56. package/dist-server/service/department/department-mutation.js.map +1 -0
  57. package/dist-server/service/department/department-query.js +97 -0
  58. package/dist-server/service/department/department-query.js.map +1 -0
  59. package/dist-server/service/department/department-type.js +90 -0
  60. package/dist-server/service/department/department-type.js.map +1 -0
  61. package/dist-server/service/department/department.js +145 -0
  62. package/dist-server/service/department/department.js.map +1 -0
  63. package/dist-server/service/department/event-subscriber.js +21 -0
  64. package/dist-server/service/department/event-subscriber.js.map +1 -0
  65. package/dist-server/service/department/index.js +12 -0
  66. package/dist-server/service/department/index.js.map +1 -0
  67. package/dist-server/service/employee/employee-history.js +157 -0
  68. package/dist-server/service/employee/employee-history.js.map +1 -0
  69. package/dist-server/service/employee/employee-mutation.js +168 -0
  70. package/dist-server/service/employee/employee-mutation.js.map +1 -0
  71. package/dist-server/service/employee/employee-query.js +97 -0
  72. package/dist-server/service/employee/employee-query.js.map +1 -0
  73. package/dist-server/service/employee/employee-type.js +90 -0
  74. package/dist-server/service/employee/employee-type.js.map +1 -0
  75. package/dist-server/service/employee/employee.js +148 -0
  76. package/dist-server/service/employee/employee.js.map +1 -0
  77. package/dist-server/service/employee/event-subscriber.js +21 -0
  78. package/dist-server/service/employee/event-subscriber.js.map +1 -0
  79. package/dist-server/service/employee/index.js +12 -0
  80. package/dist-server/service/employee/index.js.map +1 -0
  81. package/dist-server/service/index.js +28 -0
  82. package/dist-server/service/index.js.map +1 -0
  83. package/dist-server/tsconfig.tsbuildinfo +1 -0
  84. package/helps/organization/department.md +160 -0
  85. package/helps/organization/employee.md +160 -0
  86. package/package.json +35 -0
  87. package/server/controllers/index.ts +0 -0
  88. package/server/index.ts +4 -0
  89. package/server/middlewares/index.ts +3 -0
  90. package/server/migrations/index.ts +9 -0
  91. package/server/routes.ts +28 -0
  92. package/server/service/department/department-history.ts +137 -0
  93. package/server/service/department/department-mutation.ts +201 -0
  94. package/server/service/department/department-query.ts +62 -0
  95. package/server/service/department/department-type.ts +64 -0
  96. package/server/service/department/department.ts +124 -0
  97. package/server/service/department/event-subscriber.ts +17 -0
  98. package/server/service/department/index.ts +9 -0
  99. package/server/service/employee/employee-history.ts +137 -0
  100. package/server/service/employee/employee-mutation.ts +198 -0
  101. package/server/service/employee/employee-query.ts +62 -0
  102. package/server/service/employee/employee-type.ts +64 -0
  103. package/server/service/employee/employee.ts +126 -0
  104. package/server/service/employee/event-subscriber.ts +17 -0
  105. package/server/service/employee/index.ts +9 -0
  106. package/server/service/index.ts +27 -0
  107. package/server/tsconfig.json +10 -0
  108. package/things-factory.config.js +11 -0
  109. package/translations/en.json +1 -0
  110. package/translations/ko.json +1 -0
  111. package/translations/ms.json +1 -0
  112. package/translations/zh.json +1 -0
@@ -0,0 +1,198 @@
1
+ import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'
2
+ import { In } from 'typeorm'
3
+
4
+ import { createAttachment, deleteAttachmentsByRef } from '@things-factory/attachment-base'
5
+
6
+ import { Employee } from './employee'
7
+ import { NewEmployee, EmployeePatch } from './employee-type'
8
+
9
+ @Resolver(Employee)
10
+ export class EmployeeMutation {
11
+ @Directive('@transaction')
12
+ @Mutation(returns => Employee, { description: 'To create new Employee' })
13
+ async createEmployee(@Arg('employee') employee: NewEmployee, @Ctx() context: ResolverContext): Promise<Employee> {
14
+ const { domain, user, tx } = context.state
15
+
16
+ const result = await tx.getRepository(Employee).save({
17
+ ...employee,
18
+ domain,
19
+ creator: user,
20
+ updater: user
21
+ })
22
+
23
+ if (employee.photo) {
24
+ await createAttachment(
25
+ null,
26
+ {
27
+ attachment: {
28
+ file: employee.photo,
29
+ refType: Employee.name,
30
+ refBy: result.id
31
+ }
32
+ },
33
+ context
34
+ )
35
+ }
36
+
37
+ return result
38
+ }
39
+
40
+ @Directive('@transaction')
41
+ @Mutation(returns => Employee, { description: 'To modify Employee information' })
42
+ async updateEmployee(
43
+ @Arg('id') id: string,
44
+ @Arg('patch') patch: EmployeePatch,
45
+ @Ctx() context: ResolverContext
46
+ ): Promise<Employee> {
47
+ const { domain, user, tx } = context.state
48
+
49
+ const repository = tx.getRepository(Employee)
50
+ const employee = await repository.findOne({
51
+ where: { domain: { id: domain.id }, id }
52
+ })
53
+
54
+ const result = await repository.save({
55
+ ...employee,
56
+ ...patch,
57
+ updater: user
58
+ })
59
+
60
+ if (patch.photo) {
61
+ await deleteAttachmentsByRef(null, { refBys: [result.id] }, context)
62
+ await createAttachment(
63
+ null,
64
+ {
65
+ attachment: {
66
+ file: patch.photo,
67
+ refType: Employee.name,
68
+ refBy: result.id
69
+ }
70
+ },
71
+ context
72
+ )
73
+ }
74
+
75
+ return result
76
+ }
77
+
78
+ @Directive('@transaction')
79
+ @Mutation(returns => [Employee], { description: "To modify multiple Employees' information" })
80
+ async updateMultipleEmployee(
81
+ @Arg('patches', type => [EmployeePatch]) patches: EmployeePatch[],
82
+ @Ctx() context: ResolverContext
83
+ ): Promise<Employee[]> {
84
+ const { domain, user, tx } = context.state
85
+
86
+ let results = []
87
+ const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
88
+ const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
89
+ const employeeRepo = tx.getRepository(Employee)
90
+
91
+ if (_createRecords.length > 0) {
92
+ for (let i = 0; i < _createRecords.length; i++) {
93
+ const newRecord = _createRecords[i]
94
+
95
+ const result = await employeeRepo.save({
96
+ ...newRecord,
97
+ domain,
98
+ creator: user,
99
+ updater: user
100
+ })
101
+
102
+ if (newRecord.photo) {
103
+ await createAttachment(
104
+ null,
105
+ {
106
+ attachment: {
107
+ file: newRecord.photo,
108
+ refType: Employee.name,
109
+ refBy: result.id
110
+ }
111
+ },
112
+ context
113
+ )
114
+ }
115
+
116
+ results.push({ ...result, cuFlag: '+' })
117
+ }
118
+ }
119
+
120
+ if (_updateRecords.length > 0) {
121
+ for (let i = 0; i < _updateRecords.length; i++) {
122
+ const updateRecord = _updateRecords[i]
123
+ const employee = await employeeRepo.findOneBy({ id: updateRecord.id })
124
+
125
+ const result = await employeeRepo.save({
126
+ ...employee,
127
+ ...updateRecord,
128
+ updater: user
129
+ })
130
+
131
+ if (updateRecord.photo) {
132
+ await deleteAttachmentsByRef(null, { refBys: [result.id] }, context)
133
+ await createAttachment(
134
+ null,
135
+ {
136
+ attachment: {
137
+ file: updateRecord.photo,
138
+ refType: Employee.name,
139
+ refBy: result.id
140
+ }
141
+ },
142
+ context
143
+ )
144
+ }
145
+
146
+ results.push({ ...result, cuFlag: 'M' })
147
+ }
148
+ }
149
+
150
+ return results
151
+ }
152
+
153
+ @Directive('@transaction')
154
+ @Mutation(returns => Boolean, { description: 'To delete Employee' })
155
+ async deleteEmployee(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
156
+ const { domain, tx } = context.state
157
+
158
+ await tx.getRepository(Employee).delete({ domain: { id: domain.id }, id })
159
+ await deleteAttachmentsByRef(null, { refBys: [id] }, context)
160
+
161
+ return true
162
+ }
163
+
164
+ @Directive('@transaction')
165
+ @Mutation(returns => Boolean, { description: 'To delete multiple Employees' })
166
+ async deleteEmployees(
167
+ @Arg('ids', type => [String]) ids: string[],
168
+ @Ctx() context: ResolverContext
169
+ ): Promise<boolean> {
170
+ const { domain, tx } = context.state
171
+
172
+ await tx.getRepository(Employee).delete({
173
+ domain: { id: domain.id },
174
+ id: In(ids)
175
+ })
176
+
177
+ await deleteAttachmentsByRef(null, { refBys: ids }, context)
178
+
179
+ return true
180
+ }
181
+
182
+ @Directive('@transaction')
183
+ @Mutation(returns => Boolean, { description: 'To import multiple Employees' })
184
+ async importEmployees(
185
+ @Arg('employees', type => [EmployeePatch]) employees: EmployeePatch[],
186
+ @Ctx() context: ResolverContext
187
+ ): Promise<boolean> {
188
+ const { domain, tx } = context.state
189
+
190
+ await Promise.all(
191
+ employees.map(async (employee: EmployeePatch) => {
192
+ const createdEmployee: Employee = await tx.getRepository(Employee).save({ domain, ...employee })
193
+ })
194
+ )
195
+
196
+ return true
197
+ }
198
+ }
@@ -0,0 +1,62 @@
1
+ import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx, Directive } from 'type-graphql'
2
+ import { Attachment } from '@things-factory/attachment-base'
3
+ import { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'
4
+ import { User } from '@things-factory/auth-base'
5
+ import { Employee } from './employee'
6
+ import { EmployeeList } from './employee-type'
7
+
8
+ @Resolver(Employee)
9
+ export class EmployeeQuery {
10
+ @Query(returns => Employee!, { nullable: true, description: 'To fetch a Employee' })
11
+ async employee(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Employee> {
12
+ const { domain } = context.state
13
+
14
+ return await getRepository(Employee).findOne({
15
+ where: { domain: { id: domain.id }, id }
16
+ })
17
+ }
18
+
19
+ @Query(returns => EmployeeList, { description: 'To fetch multiple Employees' })
20
+ async employees(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<EmployeeList> {
21
+ const { domain } = context.state
22
+
23
+ const queryBuilder = getQueryBuilderFromListParams({
24
+ domain,
25
+ params,
26
+ repository: await getRepository(Employee),
27
+ searchables: ['name', 'description']
28
+ })
29
+
30
+ const [items, total] = await queryBuilder.getManyAndCount()
31
+
32
+ return { items, total }
33
+ }
34
+
35
+ @FieldResolver(type => String)
36
+ async photo(@Root() employee: Employee): Promise<string | undefined> {
37
+ const attachment: Attachment = await getRepository(Attachment).findOne({
38
+ where: {
39
+ domain: { id: employee.domainId },
40
+ refType: Employee.name,
41
+ refBy: employee.id
42
+ }
43
+ })
44
+
45
+ return attachment?.fullpath
46
+ }
47
+
48
+ @FieldResolver(type => Domain)
49
+ async domain(@Root() employee: Employee): Promise<Domain> {
50
+ return await getRepository(Domain).findOneBy({ id: employee.domainId })
51
+ }
52
+
53
+ @FieldResolver(type => User)
54
+ async updater(@Root() employee: Employee): Promise<User> {
55
+ return await getRepository(User).findOneBy({ id: employee.updaterId })
56
+ }
57
+
58
+ @FieldResolver(type => User)
59
+ async creator(@Root() employee: Employee): Promise<User> {
60
+ return await getRepository(User).findOneBy({ id: employee.creatorId })
61
+ }
62
+ }
@@ -0,0 +1,64 @@
1
+ import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'
2
+ import GraphQLUpload from 'graphql-upload/GraphQLUpload.js'
3
+ import { ObjectType, Field, InputType, Int, ID, registerEnumType } from 'type-graphql'
4
+
5
+ import { ObjectRef, ScalarObject } from '@things-factory/shell'
6
+
7
+ import { Employee, EmployeeStatus } from './employee'
8
+
9
+ @InputType()
10
+ export class NewEmployee {
11
+ @Field()
12
+ controlNo: string
13
+
14
+ @Field()
15
+ name: string
16
+
17
+ @Field({ nullable: true })
18
+ description?: string
19
+
20
+ @Field(type => EmployeeStatus, { nullable: true })
21
+ state?: EmployeeStatus
22
+
23
+ @Field({ nullable: true })
24
+ active?: boolean
25
+
26
+ @Field({ nullable: true })
27
+ extension?: string
28
+
29
+ @Field(type => GraphQLUpload, { nullable: true })
30
+ photo?: FileUpload
31
+ }
32
+
33
+ @InputType()
34
+ export class EmployeePatch {
35
+ @Field(type => ID, { nullable: true })
36
+ id?: string
37
+
38
+ @Field({ nullable: true })
39
+ name?: string
40
+
41
+ @Field({ nullable: true })
42
+ description?: string
43
+
44
+ @Field(type => EmployeeStatus, { nullable: true })
45
+ state?: EmployeeStatus
46
+
47
+ @Field({ nullable: true })
48
+ active?: boolean
49
+
50
+ @Field(type => GraphQLUpload, { nullable: true })
51
+ photo?: FileUpload
52
+
53
+ @Field({ nullable: true })
54
+ cuFlag?: string
55
+ }
56
+
57
+ @ObjectType()
58
+ export class EmployeeList {
59
+ @Field(type => [Employee])
60
+ items: Employee[]
61
+
62
+ @Field(type => Int)
63
+ total: number
64
+ }
@@ -0,0 +1,126 @@
1
+ import {
2
+ CreateDateColumn,
3
+ UpdateDateColumn,
4
+ DeleteDateColumn,
5
+ Entity,
6
+ Index,
7
+ Column,
8
+ OneToMany,
9
+ RelationId,
10
+ ManyToOne,
11
+ PrimaryGeneratedColumn,
12
+ VersionColumn
13
+ } from 'typeorm'
14
+ import { ObjectType, Field, Int, ID, registerEnumType } from 'type-graphql'
15
+
16
+ import { Domain } from '@things-factory/shell'
17
+ import { User } from '@things-factory/auth-base'
18
+ import { Department } from '../department/department'
19
+
20
+ export enum EmployeeStatus {
21
+ STATUS_A = 'STATUS_A',
22
+ STATUS_B = 'STATUS_B'
23
+ }
24
+
25
+ registerEnumType(EmployeeStatus, {
26
+ name: 'EmployeeStatus',
27
+ description: 'state enumeration of a employee'
28
+ })
29
+
30
+ @Entity()
31
+ @Index('ix_employee_0', (employee: Employee) => [employee.domain, employee.name, employee.deletedAt], { unique: true })
32
+ @Index('ix_employee_1', (employee: Employee) => [employee.domain, employee.controlNo, employee.deletedAt], {
33
+ unique: true
34
+ })
35
+ @ObjectType({ description: 'Entity for Employee' })
36
+ export class Employee {
37
+ @PrimaryGeneratedColumn('uuid')
38
+ @Field(type => ID)
39
+ readonly id: string
40
+
41
+ @VersionColumn()
42
+ @Field({ nullable: true })
43
+ version?: number = 1
44
+
45
+ @ManyToOne(type => Domain)
46
+ @Field({ nullable: true })
47
+ domain?: Domain
48
+
49
+ @RelationId((employee: Employee) => employee.domain)
50
+ domainId?: string
51
+
52
+ @Column()
53
+ @Field()
54
+ controlNo: string
55
+
56
+ @Column()
57
+ @Field()
58
+ name: string
59
+
60
+ @Column({ nullable: true })
61
+ @Field({ nullable: true })
62
+ description?: string
63
+
64
+ @ManyToOne(type => Employee, supervisor => supervisor.supervises, { nullable: true })
65
+ @Field({ nullable: true })
66
+ supervisor?: Employee
67
+
68
+ @RelationId((employee: Employee) => employee.supervisor)
69
+ supervisorId?: string
70
+
71
+ @OneToMany(type => Employee, employee => employee.supervisor)
72
+ @Field(type => [Employee])
73
+ supervises?: Employee[]
74
+
75
+ @OneToMany(type => Department, department => department.manager)
76
+ @Field(type => [Department])
77
+ manages?: Department[]
78
+
79
+ @Column({ nullable: true })
80
+ @Field({ nullable: true })
81
+ active?: boolean
82
+
83
+ @Column({ nullable: true })
84
+ @Field({ nullable: true })
85
+ state?: EmployeeStatus
86
+
87
+ @Column({ nullable: true })
88
+ @Field({ nullable: true })
89
+ extension?: string
90
+
91
+ @Field(type => String, { nullable: true })
92
+ photo?: string
93
+
94
+ @ManyToOne(type => User, { nullable: true })
95
+ @Field({ nullable: true })
96
+ user?: User
97
+
98
+ @RelationId((employee: Employee) => employee.user)
99
+ userId?: string
100
+
101
+ @CreateDateColumn()
102
+ @Field({ nullable: true })
103
+ createdAt?: Date
104
+
105
+ @UpdateDateColumn()
106
+ @Field({ nullable: true })
107
+ updatedAt?: Date
108
+
109
+ @DeleteDateColumn()
110
+ @Field({ nullable: true })
111
+ deletedAt?: Date
112
+
113
+ @ManyToOne(type => User, { nullable: true })
114
+ @Field({ nullable: true })
115
+ creator?: User
116
+
117
+ @RelationId((employee: Employee) => employee.creator)
118
+ creatorId?: string
119
+
120
+ @ManyToOne(type => User, { nullable: true })
121
+ @Field({ nullable: true })
122
+ updater?: User
123
+
124
+ @RelationId((employee: Employee) => employee.updater)
125
+ updaterId?: string
126
+ }
@@ -0,0 +1,17 @@
1
+ import { EventSubscriber } from 'typeorm'
2
+
3
+ import { HistoryEntitySubscriber } from '@anchan828/typeorm-history'
4
+
5
+ import { Employee } from './employee'
6
+ import { EmployeeHistory } from './employee-history'
7
+
8
+ @EventSubscriber()
9
+ export class EmployeeHistoryEntitySubscriber extends HistoryEntitySubscriber<Employee, EmployeeHistory> {
10
+ public get entity() {
11
+ return Employee
12
+ }
13
+
14
+ public get historyEntity() {
15
+ return EmployeeHistory
16
+ }
17
+ }
@@ -0,0 +1,9 @@
1
+ import { Employee } from './employee'
2
+ import { EmployeeHistory } from './employee-history'
3
+ import { EmployeeQuery } from './employee-query'
4
+ import { EmployeeMutation } from './employee-mutation'
5
+ import { EmployeeHistoryEntitySubscriber } from './event-subscriber'
6
+
7
+ export const entities = [Employee, EmployeeHistory]
8
+ export const resolvers = [EmployeeQuery, EmployeeMutation]
9
+ export const subscribers = [EmployeeHistoryEntitySubscriber]
@@ -0,0 +1,27 @@
1
+ /* EXPORT ENTITY TYPES */
2
+ export * from './department/department'
3
+ export * from './employee/employee'
4
+
5
+ /* IMPORT ENTITIES AND RESOLVERS */
6
+ import { entities as DepartmentEntities, resolvers as DepartmentResolvers, subscribers as DepartmentSubscribers } from './department'
7
+ import { entities as EmployeeEntities, resolvers as EmployeeResolvers, subscribers as EmployeeSubscribers } from './employee'
8
+
9
+ export const entities = [
10
+ /* ENTITIES */
11
+ ...DepartmentEntities,
12
+ ...EmployeeEntities,
13
+ ]
14
+
15
+ export const subscribers = [
16
+ /* SUBSCRIBERS */
17
+ ...DepartmentSubscribers,
18
+ ...EmployeeSubscribers,
19
+ ]
20
+
21
+ export const schema = {
22
+ resolverClasses: [
23
+ /* RESOLVER CLASSES */
24
+ ...DepartmentResolvers,
25
+ ...EmployeeResolvers,
26
+ ]
27
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "../../tsconfig-base.json",
3
+ "compilerOptions": {
4
+ "strict": false,
5
+ "module": "commonjs",
6
+ "outDir": "../dist-server",
7
+ "baseUrl": "./"
8
+ },
9
+ "include": ["./**/*"]
10
+ }
@@ -0,0 +1,11 @@
1
+ import route from './dist-client/route'
2
+ import bootstrap from './dist-client/bootstrap'
3
+
4
+ export default {
5
+ route,
6
+ routes: [
7
+ { tagname: 'employee-list-page', page: 'employee-list' },
8
+ { tagname: 'department-list-page', page: 'department-list' }
9
+ ],
10
+ bootstrap
11
+ }
@@ -0,0 +1 @@
1
+ {}
@@ -0,0 +1 @@
1
+ {}
@@ -0,0 +1 @@
1
+ {}
@@ -0,0 +1 @@
1
+ {}