From 483e1f82c5a0db301626550793d14e953d995a2d Mon Sep 17 00:00:00 2001 From: "Rahul R." Date: Mon, 5 Aug 2024 15:23:01 +0530 Subject: [PATCH 1/6] feat: job employee statistics basic plugin structure --- angular.json | 152 ++++++++---------- package.json | 6 +- .../plugins/job-employee-ui/.eslintrc.json | 33 ++++ packages/plugins/job-employee-ui/README.md | 7 + .../plugins/job-employee-ui/jest.config.ts | 22 +++ .../plugins/job-employee-ui/ng-package.json | 10 ++ packages/plugins/job-employee-ui/package.json | 54 +++++++ packages/plugins/job-employee-ui/project.json | 50 ++++++ packages/plugins/job-employee-ui/src/index.ts | 1 + .../job-employee-ui/src/lib/public-api.ts | 4 + .../plugins/job-employee-ui/src/test-setup.ts | 1 + .../plugins/job-employee-ui/tsconfig.json | 40 +++++ .../plugins/job-employee-ui/tsconfig.lib.json | 12 ++ .../job-employee-ui/tsconfig.lib.prod.json | 9 ++ .../job-employee-ui/tsconfig.spec.json | 11 ++ tsconfig.json | 1 + 16 files changed, 322 insertions(+), 91 deletions(-) create mode 100644 packages/plugins/job-employee-ui/.eslintrc.json create mode 100644 packages/plugins/job-employee-ui/README.md create mode 100644 packages/plugins/job-employee-ui/jest.config.ts create mode 100644 packages/plugins/job-employee-ui/ng-package.json create mode 100644 packages/plugins/job-employee-ui/package.json create mode 100644 packages/plugins/job-employee-ui/project.json create mode 100644 packages/plugins/job-employee-ui/src/index.ts create mode 100644 packages/plugins/job-employee-ui/src/lib/public-api.ts create mode 100644 packages/plugins/job-employee-ui/src/test-setup.ts create mode 100644 packages/plugins/job-employee-ui/tsconfig.json create mode 100644 packages/plugins/job-employee-ui/tsconfig.lib.json create mode 100644 packages/plugins/job-employee-ui/tsconfig.lib.prod.json create mode 100644 packages/plugins/job-employee-ui/tsconfig.spec.json diff --git a/angular.json b/angular.json index 06797ad7a19..0e3e01c7849 100644 --- a/angular.json +++ b/angular.json @@ -7,9 +7,7 @@ }, "packageManager": "yarn", "analytics": false, - "schematicCollections": [ - "@nstudio/xplat" - ] + "schematicCollections": ["@nstudio/xplat"] }, "version": 1, "newProjectRoot": "", @@ -40,9 +38,7 @@ "polyfills": "apps/gauzy/src/polyfills.ts", "tsConfig": "apps/gauzy/tsconfig.app.json", "stylePreprocessorOptions": { - "includePaths": [ - "packages/ui-core/static/styles" - ] + "includePaths": ["packages/ui-core/static/styles"] }, "assets": [ "apps/gauzy/src/favicon.ico", @@ -208,10 +204,7 @@ "builder": "@angular-devkit/build-angular:karma", "options": { "tsConfig": "packages/ui-auth/tsconfig.spec.json", - "polyfills": [ - "zone.js", - "zone.js/testing" - ] + "polyfills": ["zone.js", "zone.js/testing"] } } }, @@ -249,10 +242,7 @@ "options": { "main": "packages/ui-config/src/test-setup.ts", "tsConfig": "packages/ui-config/tsconfig.spec.json", - "polyfills": [ - "zone.js", - "zone.js/testing" - ] + "polyfills": ["zone.js", "zone.js/testing"] } } }, @@ -288,10 +278,43 @@ "builder": "@angular-devkit/build-angular:karma", "options": { "tsConfig": "packages/ui-core/tsconfig.spec.json", - "polyfills": [ - "zone.js", - "zone.js/testing" - ] + "polyfills": ["zone.js", "zone.js/testing"] + } + } + }, + "schematics": { + "@nrwl/angular:component": { + "prefix": "ngx", + "style": "scss" + } + } + }, + "plugin-job-employee-ui": { + "projectType": "library", + "root": "packages/plugins/job-employee-ui", + "sourceRoot": "packages/plugins/job-employee-ui", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:ng-packagr", + "options": { + "project": "packages/plugins/job-employee-ui/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "packages/plugins/job-employee-ui/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "packages/plugins/job-employee-ui/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "tsConfig": "packages/plugins/job-employee-ui/tsconfig.spec.json", + "polyfills": ["zone.js", "zone.js/testing"] } } }, @@ -363,10 +386,7 @@ "builder": "@angular-devkit/build-angular:karma", "options": { "tsConfig": "packages/plugins/job-search-ui/tsconfig.spec.json", - "polyfills": [ - "zone.js", - "zone.js/testing" - ] + "polyfills": ["zone.js", "zone.js/testing"] } } }, @@ -398,9 +418,7 @@ "lint": { "builder": "@nrwl/linter:eslint", "options": { - "lintFilePatterns": [ - "apps/gauzy-e2e/**/*.{js,ts}" - ] + "lintFilePatterns": ["apps/gauzy-e2e/**/*.{js,ts}"] } } } @@ -561,9 +579,7 @@ "polyfills": "apps/gauzy/src/polyfills.ts", "tsConfig": "apps/gauzy/tsconfig.app.json", "stylePreprocessorOptions": { - "includePaths": [ - "packages/ui-core/static/styles" - ] + "includePaths": ["packages/ui-core/static/styles"] }, "assets": [ "apps/gauzy/src/favicon.ico", @@ -573,9 +589,7 @@ { "glob": "**/*", "input": "apps/desktop/src/", - "ignore": [ - "**/*.ts" - ], + "ignore": ["**/*.ts"], "output": "" }, { @@ -667,9 +681,7 @@ "maxWorkers": 4, "memoryLimit": 7000, "tsConfig": "apps/api/tsconfig.app.json", - "assets": [ - "apps/api/src/assets" - ] + "assets": ["apps/api/src/assets"] }, "configurations": { "production": { @@ -712,14 +724,9 @@ "tsConfig": "apps/desktop/tsconfig.app.json", "aot": true, "stylePreprocessorOptions": { - "includePaths": [ - "apps/desktop-timer/src/assets/styles" - ] + "includePaths": ["apps/desktop-timer/src/assets/styles"] }, - "assets": [ - "apps/desktop/src/favicon.ico", - "apps/desktop/src/assets" - ], + "assets": ["apps/desktop/src/favicon.ico", "apps/desktop/src/assets"], "styles": [ "node_modules/@nebular/theme/styles/prebuilt/default.css", "node_modules/bootstrap/dist/css/bootstrap.css", @@ -817,9 +824,7 @@ "memoryLimit": 7000, "webpackConfig": "tools/build/webpack.config.js", "tsConfig": "packages/desktop-api/tsconfig.app.json", - "assets": [ - "packages/desktop-api/src/assets" - ] + "assets": ["packages/desktop-api/src/assets"] }, "configurations": { "production": { @@ -903,9 +908,7 @@ "tsConfig": "apps/desktop-timer/tsconfig.app.json", "aot": true, "stylePreprocessorOptions": { - "includePaths": [ - "apps/desktop-timer/src/assets/styles" - ] + "includePaths": ["apps/desktop-timer/src/assets/styles"] }, "assets": [ "apps/desktop-timer/src/favicon.ico", @@ -913,9 +916,7 @@ { "glob": "**/*", "input": "apps/desktop-timer/src/", - "ignore": [ - "**/*.ts" - ], + "ignore": ["**/*.ts"], "output": "" }, { @@ -994,17 +995,12 @@ "lint": { "builder": "@nrwl/linter:eslint", "options": { - "lintFilePatterns": [ - "apps/desktop-timer/src/**/*.ts", - "apps/desktop-timer/src/**/*.html" - ] + "lintFilePatterns": ["apps/desktop-timer/src/**/*.ts", "apps/desktop-timer/src/**/*.html"] } }, "test": { "builder": "@nrwl/jest:jest", - "outputs": [ - "coverage/apps/desktop-timer" - ], + "outputs": ["coverage/apps/desktop-timer"], "options": { "jestConfig": "apps/desktop-timer/jest.config.js", "passWithNoTests": true @@ -1041,9 +1037,7 @@ { "glob": "**/*", "input": "apps/server/src/", - "ignore": [ - "**/*.ts" - ], + "ignore": ["**/*.ts"], "output": "" } ], @@ -1063,9 +1057,7 @@ ], "scripts": [], "stylePreprocessorOptions": { - "includePaths": [ - "apps/server/src/assets/styles" - ] + "includePaths": ["apps/server/src/assets/styles"] } }, "configurations": { @@ -1122,17 +1114,12 @@ "lint": { "builder": "@nrwl/linter:eslint", "options": { - "lintFilePatterns": [ - "apps/server/src/**/*.ts", - "apps/server/src/**/*.html" - ] + "lintFilePatterns": ["apps/server/src/**/*.ts", "apps/server/src/**/*.html"] } }, "test": { "builder": "@nrwl/jest:jest", - "outputs": [ - "coverage/apps/server" - ], + "outputs": ["coverage/apps/server"], "options": { "jestConfig": "apps/server/jest.config.js", "passWithNoTests": true @@ -1163,9 +1150,7 @@ "polyfills": "apps/gauzy/src/polyfills.ts", "tsConfig": "apps/gauzy/tsconfig.app.json", "stylePreprocessorOptions": { - "includePaths": [ - "packages/ui-core/static/styles" - ] + "includePaths": ["packages/ui-core/static/styles"] }, "assets": [ "apps/gauzy/src/favicon.ico", @@ -1257,9 +1242,7 @@ "maxWorkers": 4, "memoryLimit": 7000, "tsConfig": "apps/api/tsconfig.app.json", - "assets": [ - "apps/api/src/assets" - ] + "assets": ["apps/api/src/assets"] }, "configurations": { "production": { @@ -1307,9 +1290,7 @@ { "glob": "**/*", "input": "apps/server-api/src/", - "ignore": [ - "**/*.ts" - ], + "ignore": ["**/*.ts"], "output": "" } ], @@ -1329,9 +1310,7 @@ ], "scripts": [], "stylePreprocessorOptions": { - "includePaths": [ - "apps/server-api/src/assets/styles" - ] + "includePaths": ["apps/server-api/src/assets/styles"] } }, "configurations": { @@ -1388,10 +1367,7 @@ "lint": { "builder": "@nrwl/linter:eslint", "options": { - "lintFilePatterns": [ - "apps/server-api/src/**/*.ts", - "apps/server-api/src/**/*.html" - ] + "lintFilePatterns": ["apps/server-api/src/**/*.ts", "apps/server-api/src/**/*.html"] } }, "test": { @@ -1420,9 +1396,7 @@ "maxWorkers": 4, "memoryLimit": 7000, "tsConfig": "apps/api/tsconfig.app.json", - "assets": [ - "apps/api/src/assets" - ] + "assets": ["apps/api/src/assets"] }, "configurations": { "production": { diff --git a/package.json b/package.json index 801ae36e976..4ec8a4cae42 100644 --- a/package.json +++ b/package.json @@ -137,8 +137,8 @@ "build:package:config:prod": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn --cwd ./packages/config build:prod", "build:package:plugin": "cross-env NODE_ENV=development NODE_OPTIONS=--max-old-space-size=12288 yarn --cwd ./packages/plugin build", "build:package:plugin:prod": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn --cwd ./packages/plugin build", - "build:package:plugins:pre": "yarn run build:package:ui-config && yarn run build:package:ui-core && yarn run build:package:ui-auth && yarn run build:package:plugin:job-search-ui && yarn run build:package:plugin:job-matching-ui", - "build:package:plugins:pre:prod": "yarn run build:package:ui-config:prod && yarn run build:package:ui-core:prod && yarn run build:package:ui-auth && yarn run build:package:plugin:job-search-ui:prod && && yarn run build:package:plugin:job-matching-ui:prod", + "build:package:plugins:pre": "yarn run build:package:ui-config && yarn run build:package:ui-core && yarn run build:package:ui-auth && yarn run build:package:plugin:job-search-ui && yarn run build:package:plugin:job-matching-ui && yarn run build:package:plugin:job-employee-ui", + "build:package:plugins:pre:prod": "yarn run build:package:ui-config:prod && yarn run build:package:ui-core:prod && yarn run build:package:ui-auth && yarn run build:package:plugin:job-search-ui:prod && && yarn run build:package:plugin:job-matching-ui:prod && yarn run build:package:plugin:job-employee-ui:prod", "build:package:plugins:post": "yarn run build:package:plugin:integration-jira && yarn run build:package:plugin:integration-ai && yarn run build:package:plugin:sentry && yarn run build:package:plugin:jitsu-analytic && yarn run build:package:plugin:product-reviews && yarn run build:package:plugin:job-search && yarn run build:package:plugin:job-proposal && yarn run build:package:plugin:integration-github && yarn run build:package:plugin:knowledge-base && yarn run build:package:plugin:changelog && yarn run build:package:plugin:integration-hubstaff && yarn run build:package:plugin:integration-upwork", "build:package:plugins:post:prod": "yarn run build:package:plugin:integration-jira:prod && yarn run build:package:plugin:integration-ai:prod && yarn run build:package:plugin:sentry:prod && yarn run build:package:plugin:jitsu-analytic:prod && yarn run build:package:plugin:product-reviews:prod && yarn run build:package:plugin:job-search:prod && yarn run build:package:plugin:job-proposal:prod && yarn run build:package:plugin:integration-github:prod && yarn run build:package:plugin:knowledge-base:prod && yarn run build:package:plugin:changelog:prod && yarn run build:package:plugin:integration-hubstaff:prod && yarn run build:package:plugin:integration-upwork:prod", "build:package:plugin:integration-ai": "cross-env NODE_ENV=development NODE_OPTIONS=--max-old-space-size=12288 yarn --cwd ./packages/plugins/integration-ai build", @@ -159,6 +159,8 @@ "build:package:plugin:product-reviews:prod": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn --cwd ./packages/plugins/product-reviews build:prod", "build:package:plugin:job-search": "cross-env NODE_ENV=development NODE_OPTIONS=--max-old-space-size=12288 yarn --cwd ./packages/plugins/job-search build", "build:package:plugin:job-search:prod": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn --cwd ./packages/plugins/job-search build:prod", + "build:package:plugin:job-employee-ui": "cross-env NODE_ENV=development NODE_OPTIONS=--max-old-space-size=12288 yarn --cwd ./packages/plugins/job-employee-ui lib:build", + "build:package:plugin:job-employee-ui:prod": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn --cwd ./packages/plugins/job-employee-ui lib:build:prod", "build:package:plugin:job-matching-ui": "cross-env NODE_ENV=development NODE_OPTIONS=--max-old-space-size=12288 yarn --cwd ./packages/plugins/job-matching-ui lib:build", "build:package:plugin:job-matching-ui:prod": "cross-env NODE_ENV=production NODE_OPTIONS=--max-old-space-size=12288 yarn --cwd ./packages/plugins/job-matching-ui lib:build:prod", "build:package:plugin:job-search-ui": "cross-env NODE_ENV=development NODE_OPTIONS=--max-old-space-size=12288 yarn --cwd ./packages/plugins/job-search-ui lib:build", diff --git a/packages/plugins/job-employee-ui/.eslintrc.json b/packages/plugins/job-employee-ui/.eslintrc.json new file mode 100644 index 00000000000..32896661eef --- /dev/null +++ b/packages/plugins/job-employee-ui/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": ["../../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "gauzy", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "gauzy", + "style": "kebab-case" + } + ] + }, + "extends": ["plugin:@nrwl/nx/angular", "plugin:@angular-eslint/template/process-inline-templates"] + }, + { + "files": ["*.html"], + "extends": ["plugin:@nrwl/nx/angular-template"], + "rules": {} + } + ] +} diff --git a/packages/plugins/job-employee-ui/README.md b/packages/plugins/job-employee-ui/README.md new file mode 100644 index 00000000000..1f281a196c6 --- /dev/null +++ b/packages/plugins/job-employee-ui/README.md @@ -0,0 +1,7 @@ +# @gauzy/plugin-job-employee-ui + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test plugin-job-employee-ui` to execute the unit tests. diff --git a/packages/plugins/job-employee-ui/jest.config.ts b/packages/plugins/job-employee-ui/jest.config.ts new file mode 100644 index 00000000000..f8adf1bdf45 --- /dev/null +++ b/packages/plugins/job-employee-ui/jest.config.ts @@ -0,0 +1,22 @@ +/* eslint-disable */ +export default { + displayName: 'plugin-job-employee-ui', + preset: '../../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + coverageDirectory: '../../../coverage/packages/plugins/job-employee-ui', + transform: { + '^.+\\.(ts|mjs|js|html)$': [ + 'jest-preset-angular', + { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$' + } + ] + }, + transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment' + ] +}; diff --git a/packages/plugins/job-employee-ui/ng-package.json b/packages/plugins/job-employee-ui/ng-package.json new file mode 100644 index 00000000000..2df31400507 --- /dev/null +++ b/packages/plugins/job-employee-ui/ng-package.json @@ -0,0 +1,10 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/packages/plugins/job-employee-ui", + "lib": { + "entryFile": "src/index.ts", + "styleIncludePaths": ["../../../dist/packages/ui-core/static/styles"] + }, + "allowedNonPeerDependencies": ["."], + "assets": [] +} diff --git a/packages/plugins/job-employee-ui/package.json b/packages/plugins/job-employee-ui/package.json new file mode 100644 index 00000000000..13589345ca6 --- /dev/null +++ b/packages/plugins/job-employee-ui/package.json @@ -0,0 +1,54 @@ +{ + "name": "@gauzy/plugin-job-employee-ui", + "version": "0.1.0", + "type": "commonjs", + "description": "", + "author": { + "name": "Ever Co. LTD", + "email": "ever@ever.co", + "url": "https://ever.co" + }, + "license": "AGPL-3.0", + "repository": { + "type": "git", + "url": "https://github.com/ever-co/ever-gauzy" + }, + "bugs": { + "url": "https://github.com/ever-co/ever-gauzy/issues" + }, + "homepage": "https://ever.co", + "keywords": [], + "private": true, + "scripts": { + "lib:build": "ng build plugin-job-employee-ui --configuration=development", + "lib:build:prod": "ng build plugin-job-employee-ui --configuration=production", + "lib:watch": "ng build plugin-job-employee-ui --watch --configuration=development" + }, + "peerDependencies": { + "@angular/common": "^16.2.12", + "@angular/core": "^16.2.12" + }, + "dependencies": { + "@angular/forms": "^16.2.12", + "@angular/router": "^16.2.12", + "@gauzy/contracts": "^0.1.0", + "@nebular/theme": "^12.0.0", + "@ngneat/until-destroy": "^9.2.0", + "@ngx-translate/core": "^15.0.0", + "@ngx-translate/http-loader": "^8.0.0", + "angular2-smart-table": "^3.2.0", + "ngx-permissions": "^13.0.1", + "rxjs": "^7.4.0", + "tslib": "^2.6.2" + }, + "devDependencies": { + "@types/jest": "^29.4.4", + "@types/node": "^20.14.9", + "jest-preset-angular": "^13.1.4" + }, + "engines": { + "node": ">=20.11.1", + "yarn": ">=1.22.19" + }, + "sideEffects": false +} diff --git a/packages/plugins/job-employee-ui/project.json b/packages/plugins/job-employee-ui/project.json new file mode 100644 index 00000000000..cf73302d1fb --- /dev/null +++ b/packages/plugins/job-employee-ui/project.json @@ -0,0 +1,50 @@ +{ + "name": "plugin-job-employee-ui", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "packages/plugins/job-employee-ui/src", + "prefix": "gauzy", + "tags": [], + "projectType": "library", + "targets": { + "build": { + "executor": "@nrwl/angular:package", + "outputs": ["{workspaceRoot}/dist/{projectRoot}"], + "options": { + "project": "packages/plugins/job-employee-ui/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "packages/plugins/job-employee-ui/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "packages/plugins/job-employee-ui/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "executor": "@nrwl/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "packages/plugins/job-employee-ui/jest.config.ts", + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "codeCoverage": true + } + } + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": [ + "packages/plugins/job-employee-ui/**/*.ts", + "packages/plugins/job-employee-ui/**/*.html" + ] + } + } + } +} diff --git a/packages/plugins/job-employee-ui/src/index.ts b/packages/plugins/job-employee-ui/src/index.ts new file mode 100644 index 00000000000..a18a28af167 --- /dev/null +++ b/packages/plugins/job-employee-ui/src/index.ts @@ -0,0 +1 @@ +export * from './lib/public-api'; diff --git a/packages/plugins/job-employee-ui/src/lib/public-api.ts b/packages/plugins/job-employee-ui/src/lib/public-api.ts new file mode 100644 index 00000000000..499224397f7 --- /dev/null +++ b/packages/plugins/job-employee-ui/src/lib/public-api.ts @@ -0,0 +1,4 @@ +/** + * Public API Surface of job-employee-ui + */ +export const placeholders = '@gauzy/plugin-job-employee-ui'; diff --git a/packages/plugins/job-employee-ui/src/test-setup.ts b/packages/plugins/job-employee-ui/src/test-setup.ts new file mode 100644 index 00000000000..1100b3e8a6e --- /dev/null +++ b/packages/plugins/job-employee-ui/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular/setup-jest'; diff --git a/packages/plugins/job-employee-ui/tsconfig.json b/packages/plugins/job-employee-ui/tsconfig.json new file mode 100644 index 00000000000..339a416fe07 --- /dev/null +++ b/packages/plugins/job-employee-ui/tsconfig.json @@ -0,0 +1,40 @@ +{ + "compilerOptions": { + "target": "es2022", + "useDefineForClassFields": false, + "forceConsistentCasingInFileNames": true, + "strict": false, + "noImplicitOverride": false, + "noPropertyAccessFromIndexSignature": false, + "noImplicitReturns": false, + "noFallthroughCasesInSwitch": false, + "baseUrl": ".", + "paths": { + "@gauzy/ui-core": ["./../../../dist/packages/ui-core"], + "@gauzy/ui-core/common": ["./../../../dist/packages/ui-core/common"], + "@gauzy/ui-core/core": ["./../../../dist/packages/ui-core/core"], + "@gauzy/ui-core/i18n": ["./../../../dist/packages/ui-core/i18n"], + "@gauzy/ui-core/shared": ["./../../../dist/packages/ui-core/shared"], + "@gauzy/ui-core/theme": ["./../../../dist/packages/ui-core/theme"], + "@ngx-translate/*": ["./node_modules/@ngx-translate/*"], + "ngx-permissions": ["./node_modules/ngx-permissions"] + } + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "extends": "../../../tsconfig.base.json", + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/packages/plugins/job-employee-ui/tsconfig.lib.json b/packages/plugins/job-employee-ui/tsconfig.lib.json new file mode 100644 index 00000000000..5d1d67c0227 --- /dev/null +++ b/packages/plugins/job-employee-ui/tsconfig.lib.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": ["src/**/*.spec.ts", "src/test-setup.ts", "jest.config.ts", "src/**/*.test.ts"], + "include": ["src/**/*.ts"] +} diff --git a/packages/plugins/job-employee-ui/tsconfig.lib.prod.json b/packages/plugins/job-employee-ui/tsconfig.lib.prod.json new file mode 100644 index 00000000000..7b29b93f6f3 --- /dev/null +++ b/packages/plugins/job-employee-ui/tsconfig.lib.prod.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial" + } +} diff --git a/packages/plugins/job-employee-ui/tsconfig.spec.json b/packages/plugins/job-employee-ui/tsconfig.spec.json new file mode 100644 index 00000000000..0b8b86994ff --- /dev/null +++ b/packages/plugins/job-employee-ui/tsconfig.spec.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./dist/out-tsc", + "module": "commonjs", + "target": "es2016", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"] +} diff --git a/tsconfig.json b/tsconfig.json index 2a8313c7cd0..18cf9fcb23d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,6 +9,7 @@ "@gauzy/desktop-timer": ["packages/desktop-timer/src/index.ts"], "@gauzy/desktop-ui-lib": ["packages/desktop-ui-lib/src/index.ts"], "@gauzy/desktop-window": ["packages/desktop-window/src/index.ts"], + "@gauzy/plugins/job-employee-ui": ["packages/plugins/job-employee-ui/src/index.ts"], "@gauzy/plugins/job-matching-ui": ["packages/plugins/job-matching-ui/src/index.ts"], "@gauzy/plugins/job-search-ui": ["packages/plugins/job-search-ui/src/index.ts"], "@gauzy/ui-auth": ["packages/ui-auth/src/index.ts"], From 8d61dba4fa58ee63b7edda4e4fa193bcfa70fae7 Mon Sep 17 00:00:00 2001 From: "Rahul R." Date: Mon, 5 Aug 2024 15:54:54 +0530 Subject: [PATCH 2/6] feat: job employees list & statistics --- .../edit-employee-main.component.ts | 2 - .../employees/employees-routing.module.ts | 25 ---- .../pages/jobs/employees/employees.module.ts | 43 ------ .../employees/employees.component.scss | 29 ---- apps/gauzy/src/app/pages/jobs/jobs.module.ts | 24 +--- apps/gauzy/src/app/pages/jobs/plugins.ts | 15 ++ .../proposal-template.component.scss | 78 ++++++++++- .../pages/pipelines/pipelines.component.scss | 9 +- .../job-employee/job-employee.component.html | 4 +- .../job-employee/job-employee.component.scss | 79 +++++++++++ .../job-employee.component.spec.ts | 12 +- .../job-employee/job-employee.component.ts | 60 +++++++- .../src/lib/job-employee.module.ts | 129 ++++++++++++++++++ .../src/lib/job-employee.routes.ts | 24 ++++ .../job-employee-ui/src/lib/public-api.ts | 4 +- 15 files changed, 393 insertions(+), 144 deletions(-) delete mode 100644 apps/gauzy/src/app/pages/jobs/employees/employees-routing.module.ts delete mode 100644 apps/gauzy/src/app/pages/jobs/employees/employees.module.ts delete mode 100644 apps/gauzy/src/app/pages/jobs/employees/employees/employees.component.scss create mode 100644 apps/gauzy/src/app/pages/jobs/plugins.ts rename apps/gauzy/src/app/pages/jobs/employees/employees/employees.component.html => packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.html (98%) create mode 100644 packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.scss rename apps/gauzy/src/app/pages/jobs/employees/employees/employees.component.spec.ts => packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.spec.ts (55%) rename apps/gauzy/src/app/pages/jobs/employees/employees/employees.component.ts => packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.ts (89%) create mode 100644 packages/plugins/job-employee-ui/src/lib/job-employee.module.ts create mode 100644 packages/plugins/job-employee-ui/src/lib/job-employee.routes.ts diff --git a/apps/gauzy/src/app/pages/employees/edit-employee/edit-employee-profile/edit-employee-main/edit-employee-main.component.ts b/apps/gauzy/src/app/pages/employees/edit-employee/edit-employee-profile/edit-employee-main/edit-employee-main.component.ts index fd4a63ea18f..1a8fa6fe9fc 100644 --- a/apps/gauzy/src/app/pages/employees/edit-employee/edit-employee-profile/edit-employee-main/edit-employee-main.component.ts +++ b/apps/gauzy/src/app/pages/employees/edit-employee/edit-employee-profile/edit-employee-main/edit-employee-main.component.ts @@ -83,8 +83,6 @@ export class EditEmployeeMainComponent implements OnInit, OnDestroy { async updateImageAsset(image: IImageAsset) { try { if (image) { - console.log('image', image); - // Update user form data in store (assuming updateUserForm is async) await this._employeeStore.updateUserForm({ imageId: image.id, diff --git a/apps/gauzy/src/app/pages/jobs/employees/employees-routing.module.ts b/apps/gauzy/src/app/pages/jobs/employees/employees-routing.module.ts deleted file mode 100644 index 81967b9d948..00000000000 --- a/apps/gauzy/src/app/pages/jobs/employees/employees-routing.module.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { NgModule } from '@angular/core'; -import { Routes, RouterModule } from '@angular/router'; -import { PermissionsEnum } from '@gauzy/contracts'; -import { PermissionsGuard } from '@gauzy/ui-core/core'; -import { EmployeesComponent } from './employees/employees.component'; - -const routes: Routes = [ - { - path: '', - component: EmployeesComponent, - canActivate: [PermissionsGuard], - data: { - permissions: { - only: [PermissionsEnum.ORG_JOB_EMPLOYEE_VIEW], - redirectTo: '/pages/jobs/search' - } - } - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class EmployeesRoutingModule {} diff --git a/apps/gauzy/src/app/pages/jobs/employees/employees.module.ts b/apps/gauzy/src/app/pages/jobs/employees/employees.module.ts deleted file mode 100644 index ec5dcd0ded9..00000000000 --- a/apps/gauzy/src/app/pages/jobs/employees/employees.module.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { - NbIconModule, - NbSpinnerModule, - NbCardModule, - NbButtonModule, - NbToggleModule, - NbTabsetModule -} from '@nebular/theme'; -import { Angular2SmartTableModule } from 'angular2-smart-table'; -import { TranslateModule } from '@ngx-translate/core'; -import { NgxPermissionsModule } from 'ngx-permissions'; -import { GauzyButtonActionModule, PaginationV2Module, SmartTableToggleModule } from '@gauzy/ui-core/shared'; -import { EmployeesRoutingModule } from './employees-routing.module'; -import { EmployeesComponent } from './employees/employees.component'; -import { SharedModule } from '@gauzy/ui-core/shared'; -import { WorkInProgressModule } from '../../work-in-progress/work-in-progress.module'; - -@NgModule({ - declarations: [EmployeesComponent], - imports: [ - CommonModule, - FormsModule, - EmployeesRoutingModule, - NbIconModule, - NbSpinnerModule, - NbCardModule, - NbButtonModule, - NbToggleModule, - NbTabsetModule, - NgxPermissionsModule.forChild(), - TranslateModule.forChild(), - SharedModule, - Angular2SmartTableModule, - SmartTableToggleModule, - GauzyButtonActionModule, - PaginationV2Module, - WorkInProgressModule - ] -}) -export class EmployeesModule {} diff --git a/apps/gauzy/src/app/pages/jobs/employees/employees/employees.component.scss b/apps/gauzy/src/app/pages/jobs/employees/employees/employees.component.scss deleted file mode 100644 index a74c078e3b4..00000000000 --- a/apps/gauzy/src/app/pages/jobs/employees/employees/employees.component.scss +++ /dev/null @@ -1,29 +0,0 @@ -@import '../../../pipelines/pipelines.component.scss'; - -:host nb-card-body { - height: calc(100vh - 13.5rem) !important; - ::ng-deep angular2-smart-table { - .angular2-smart-actions { - width: 5%; - a { - transform: scale(0.6); - border-radius: 0.5rem; - } - a:nth-child(1) { - background-color: #00d68f !important; - color: white; - } - a:nth-child(2) { - background-color: white !important; - color: #ff3d71; - box-shadow: var(--gauzy-shadow); - } - } - .angular2-smart-actions-title { - a { - background-color: #00d68f !important; - transform: scale(0.9); - } - } - } -} diff --git a/apps/gauzy/src/app/pages/jobs/jobs.module.ts b/apps/gauzy/src/app/pages/jobs/jobs.module.ts index 5ffb3f8a06e..f492c8cc24e 100644 --- a/apps/gauzy/src/app/pages/jobs/jobs.module.ts +++ b/apps/gauzy/src/app/pages/jobs/jobs.module.ts @@ -2,14 +2,10 @@ import { NgModule } from '@angular/core'; import { RouterModule, ROUTES } from '@angular/router'; import { SharedModule } from '@gauzy/ui-core/shared'; import { PageRouteService } from '@gauzy/ui-core/core'; -import { JobMatchingModule } from '@gauzy/plugins/job-matching-ui'; -import { JobSearchModule } from '@gauzy/plugins/job-search-ui'; +import { PLUGINS } from './plugins'; import { JobLayoutComponent } from './job-layout/job-layout.component'; import { createRoutes } from './job.routes'; -// Plugins -export const PLUGINS = [JobSearchModule, JobMatchingModule]; - @NgModule({ declarations: [JobLayoutComponent], imports: [SharedModule, RouterModule.forChild([]), ...PLUGINS], @@ -53,23 +49,5 @@ export class JobsModule { } } }); - // Register Job Employee Page Routes - _pageRouteService.registerPageRoute({ - // Register the location 'jobs' - location: 'jobs', - // Register the path 'employee' - path: 'employee', - // Register the loadChildren function to load the EmployeesModule lazy module - loadChildren: () => import('./employees/employees.module').then((m) => m.EmployeesModule), - // Register the data object - data: { - selectors: { - date: true, - employee: true, - project: false, - team: false - } - } - }); } } diff --git a/apps/gauzy/src/app/pages/jobs/plugins.ts b/apps/gauzy/src/app/pages/jobs/plugins.ts new file mode 100644 index 00000000000..7b894709ccc --- /dev/null +++ b/apps/gauzy/src/app/pages/jobs/plugins.ts @@ -0,0 +1,15 @@ +import { JobEmployeeModule } from '@gauzy/plugins/job-employee-ui'; +import { JobMatchingModule } from '@gauzy/plugins/job-matching-ui'; +import { JobSearchModule } from '@gauzy/plugins/job-search-ui'; + +/** + * An array of plugins to be included or used in the codebase. + */ +export const PLUGINS = [ + // Indicates the inclusion or intention to use the JobEmployeeModule in the codebase. + JobEmployeeModule, + // Indicates the inclusion or intention to use the JobMatchingModule in the codebase. + JobMatchingModule, + // Indicates the inclusion or intention to use the JobSearchModule in the codebase. + JobSearchModule +]; diff --git a/apps/gauzy/src/app/pages/jobs/proposal-template/proposal-template/proposal-template.component.scss b/apps/gauzy/src/app/pages/jobs/proposal-template/proposal-template/proposal-template.component.scss index 0ee63d35843..f4c16b95f56 100644 --- a/apps/gauzy/src/app/pages/jobs/proposal-template/proposal-template/proposal-template.component.scss +++ b/apps/gauzy/src/app/pages/jobs/proposal-template/proposal-template/proposal-template.component.scss @@ -1,7 +1,83 @@ @import 'gauzy/_gauzy-table'; -@import '../../employees/employees/employees.component.scss'; @import 'gauzy/_gauzy-cards'; +:host { + height: 100%; + nb-tab.content-active { + padding: 1rem; + height: calc(100% - 3rem); + border-radius: 0 0 var(--border-radius) var(--border-radius); + overflow: unset; + display: flex; + flex-direction: column; + @include nb-ltr(padding, 1rem 0.5rem 1rem 18px); + @include nb-rtl(padding, 1rem 18px 1rem 0.5rem); + nb-accordion { + @include nb-ltr(margin-right, 0.625rem); + @include nb-rtl(margin-left, 0.625rem); + } + } + nb-tabset { + height: calc(100% - 1.5rem); + } + nb-card, + nb-tab.content-active { + background-color: var(--gauzy-card-2); + } + nb-card-body { + overflow: unset; + background-color: unset; + } + nb-card { + height: 100%; + } +} +:host .gauzy-button-container { + position: absolute; + @include nb-ltr(right, 18px); + @include nb-rtl(left, 18px); + top: 0; +} +nb-accordion-item-header ::ng-deep nb-icon { + border: 1px solid nb-theme(border-basic-color-4); + border-radius: nb-theme(input-rectangle-border-radius); + width: 1.75rem; + height: 1.75rem; +} + +.grid { + overflow: auto; + height: 100%; +} + +:host nb-card-body { + height: calc(100vh - 13.5rem) !important; + ::ng-deep angular2-smart-table { + .angular2-smart-actions { + width: 5%; + a { + transform: scale(0.6); + border-radius: 0.5rem; + } + a:nth-child(1) { + background-color: #00d68f !important; + color: white; + } + a:nth-child(2) { + background-color: white !important; + color: #ff3d71; + box-shadow: var(--gauzy-shadow); + } + } + .angular2-smart-actions-title { + a { + background-color: #00d68f !important; + transform: scale(0.9); + } + } + } +} + :host ::ng-deep ngx-avatar { .inner-wrapper { background-color: nb-theme(color-primary-transparent-100); diff --git a/apps/gauzy/src/app/pages/pipelines/pipelines.component.scss b/apps/gauzy/src/app/pages/pipelines/pipelines.component.scss index 03877e1896b..9fffd85eed1 100644 --- a/apps/gauzy/src/app/pages/pipelines/pipelines.component.scss +++ b/apps/gauzy/src/app/pages/pipelines/pipelines.component.scss @@ -16,18 +16,18 @@ @include nb-rtl(margin-left, 0.625rem); } } - nb-tabset{ + nb-tabset { height: calc(100% - 1.5rem); } nb-card, nb-tab.content-active { background-color: var(--gauzy-card-2); } - nb-card-body{ + nb-card-body { overflow: unset; background-color: unset; } - nb-card{ + nb-card { height: 100%; } } @@ -44,8 +44,7 @@ nb-accordion-item-header ::ng-deep nb-icon { height: 1.75rem; } -.grid{ +.grid { overflow: auto; height: 100%; } - diff --git a/apps/gauzy/src/app/pages/jobs/employees/employees/employees.component.html b/packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.html similarity index 98% rename from apps/gauzy/src/app/pages/jobs/employees/employees/employees.component.html rename to packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.html index aef44b99e69..4b5c51cff3b 100644 --- a/apps/gauzy/src/app/pages/jobs/employees/employees/employees.component.html +++ b/packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.html @@ -22,10 +22,10 @@

- + - + diff --git a/packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.scss b/packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.scss new file mode 100644 index 00000000000..a427841a4b6 --- /dev/null +++ b/packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.scss @@ -0,0 +1,79 @@ +@import 'gauzy/_gauzy-table'; +@import 'gauzy/_gauzy-cards'; + +:host { + height: 100%; + nb-tab.content-active { + padding: 1rem; + height: calc(100% - 3rem); + border-radius: 0 0 var(--border-radius) var(--border-radius); + overflow: unset; + display: flex; + flex-direction: column; + @include nb-ltr(padding, 1rem 0.5rem 1rem 18px); + @include nb-rtl(padding, 1rem 18px 1rem 0.5rem); + nb-accordion { + @include nb-ltr(margin-right, 0.625rem); + @include nb-rtl(margin-left, 0.625rem); + } + } + nb-tabset { + height: calc(100% - 1.5rem); + } + nb-card, + nb-tab.content-active { + background-color: var(--gauzy-card-2); + } + nb-card-body { + overflow: unset; + background-color: unset; + } + nb-card { + height: 100%; + } +} +:host .gauzy-button-container { + position: absolute; + @include nb-ltr(right, 18px); + @include nb-rtl(left, 18px); + top: 0; +} +nb-accordion-item-header ::ng-deep nb-icon { + border: 1px solid nb-theme(border-basic-color-4); + border-radius: nb-theme(input-rectangle-border-radius); + width: 1.75rem; + height: 1.75rem; +} + +.grid { + overflow: auto; + height: 100%; +} + +:host nb-card-body { + height: calc(100vh - 13.5rem) !important; + ::ng-deep angular2-smart-table { + .angular2-smart-actions { + width: 5%; + a { + transform: scale(0.6); + border-radius: 0.5rem; + } + a:nth-child(1) { + background-color: #00d68f !important; + color: white; + } + a:nth-child(2) { + background-color: white !important; + color: #ff3d71; + box-shadow: var(--gauzy-shadow); + } + } + .angular2-smart-actions-title { + a { + background-color: #00d68f !important; + transform: scale(0.9); + } + } + } +} diff --git a/apps/gauzy/src/app/pages/jobs/employees/employees/employees.component.spec.ts b/packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.spec.ts similarity index 55% rename from apps/gauzy/src/app/pages/jobs/employees/employees/employees.component.spec.ts rename to packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.spec.ts index c2d1e695736..8b447927002 100644 --- a/apps/gauzy/src/app/pages/jobs/employees/employees/employees.component.spec.ts +++ b/packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.spec.ts @@ -1,20 +1,20 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { EmployeesComponent } from './employees.component'; +import { JobEmployeeComponent } from './job-employee.component'; -describe('EmployeesComponent', () => { - let component: EmployeesComponent; - let fixture: ComponentFixture; +describe('JobEmployeeComponent', () => { + let component: JobEmployeeComponent; + let fixture: ComponentFixture; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [EmployeesComponent], + declarations: [JobEmployeeComponent], teardown: { destroyAfterEach: false } }).compileComponents(); }); beforeEach(() => { - fixture = TestBed.createComponent(EmployeesComponent); + fixture = TestBed.createComponent(JobEmployeeComponent); component = fixture.componentInstance; fixture.detectChanges(); }); diff --git a/apps/gauzy/src/app/pages/jobs/employees/employees/employees.component.ts b/packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.ts similarity index 89% rename from apps/gauzy/src/app/pages/jobs/employees/employees/employees.component.ts rename to packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.ts index b9c9ccc8b11..826078fb6ec 100644 --- a/apps/gauzy/src/app/pages/jobs/employees/employees/employees.component.ts +++ b/packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.ts @@ -2,13 +2,21 @@ import { AfterViewInit, Component, OnDestroy, OnInit } from '@angular/core'; import { CurrencyPipe } from '@angular/common'; import { HttpClient } from '@angular/common/http'; import { Router } from '@angular/router'; -import { BehaviorSubject, combineLatest, Subject } from 'rxjs'; +import { BehaviorSubject, combineLatest, merge, Subject } from 'rxjs'; import { debounceTime, filter, tap } from 'rxjs/operators'; import { NbTabComponent } from '@nebular/theme'; import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'; import { TranslateService } from '@ngx-translate/core'; import { Cell } from 'angular2-smart-table'; -import { ID, IEmployee, IEmployeeJobsStatisticsResponse, IOrganization, PermissionsEnum } from '@gauzy/contracts'; +import { NgxPermissionsService } from 'ngx-permissions'; +import { + ID, + IEmployee, + IEmployeeJobsStatisticsResponse, + IOrganization, + LanguagesEnum, + PermissionsEnum +} from '@gauzy/contracts'; import { EmployeesService, JobService, ServerDataSource, ToastrService } from '@gauzy/ui-core/core'; import { API_PREFIX, Store, distinctUntilChange } from '@gauzy/ui-core/common'; import { @@ -18,7 +26,11 @@ import { PaginationFilterBaseComponent, SmartTableToggleComponent } from '@gauzy/ui-core/shared'; +import { I18nService } from '@gauzy/ui-core/i18n'; +/** + * Job Employee Component + */ export enum JobSearchTabsEnum { BROWSE = 'BROWSE', SEARCH = 'SEARCH', @@ -28,11 +40,11 @@ export enum JobSearchTabsEnum { @UntilDestroy({ checkProperties: true }) @Component({ selector: 'ga-job-employees', - templateUrl: './employees.component.html', - styleUrls: ['./employees.component.scss'], + templateUrl: './job-employee.component.html', + styleUrls: ['./job-employee.component.scss'], providers: [CurrencyPipe] }) -export class EmployeesComponent extends PaginationFilterBaseComponent implements AfterViewInit, OnInit, OnDestroy { +export class JobEmployeeComponent extends PaginationFilterBaseComponent implements AfterViewInit, OnInit, OnDestroy { public jobSearchTabsEnum = JobSearchTabsEnum; public loading: boolean = false; public settingsSmartTable: any; @@ -52,7 +64,9 @@ export class EmployeesComponent extends PaginationFilterBaseComponent implements private readonly _employeesService: EmployeesService, private readonly _jobService: JobService, private readonly _toastrService: ToastrService, - private readonly _currencyPipe: CurrencyPipe + private readonly _currencyPipe: CurrencyPipe, + private readonly _ngxPermissionsService: NgxPermissionsService, + private readonly _i18nService: I18nService ) { super(translateService); } @@ -60,6 +74,11 @@ export class EmployeesComponent extends PaginationFilterBaseComponent implements ngOnInit(): void { this._applyTranslationOnSmartTable(); this._loadSmartTableSettings(); + + // Initialize UI permissions + this.initializeUiPermissions(); + // Initialize UI languages and Update Locale + this.initializeUiLanguagesAndLocale(); } ngAfterViewInit(): void { @@ -112,6 +131,33 @@ export class EmployeesComponent extends PaginationFilterBaseComponent implements .subscribe(); } + /** + * Initialize UI permissions + */ + private initializeUiPermissions() { + // Load permissions + const permissions = this._store.userRolePermissions.map(({ permission }) => permission); + this._ngxPermissionsService.flushPermissions(); // Flush permissions + this._ngxPermissionsService.loadPermissions(permissions); // Load permissions + } + + /** + * Initialize UI languages and Update Locale + */ + private initializeUiLanguagesAndLocale() { + // Observable that emits when preferred language changes. + const preferredLanguage$ = merge(this._store.preferredLanguage$, this._i18nService.preferredLanguage$).pipe( + distinctUntilChange(), + filter((preferredLanguage: LanguagesEnum) => !!preferredLanguage), + untilDestroyed(this) + ); + + // Subscribe to preferred language changes + preferredLanguage$.subscribe((preferredLanguage: string | LanguagesEnum) => { + this.translateService.use(preferredLanguage); + }); + } + /** * Registers and configures the Smart Table source. */ @@ -463,7 +509,7 @@ export class EmployeesComponent extends PaginationFilterBaseComponent implements * @param event - The pointer event that triggered this method. * @returns A promise that resolves when the navigation is complete or exits early if there is no organization. */ - addNew = async (event: PointerEvent): Promise => { + addNew = async (event: MouseEvent): Promise => { if (!this.organization) { return; } diff --git a/packages/plugins/job-employee-ui/src/lib/job-employee.module.ts b/packages/plugins/job-employee-ui/src/lib/job-employee.module.ts new file mode 100644 index 00000000000..af222790326 --- /dev/null +++ b/packages/plugins/job-employee-ui/src/lib/job-employee.module.ts @@ -0,0 +1,129 @@ +import { Inject, NgModule } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { RouterModule, ROUTES } from '@angular/router'; +import { + NbButtonModule, + NbCardModule, + NbIconModule, + NbSpinnerModule, + NbTabsetModule, + NbToggleModule +} from '@nebular/theme'; +import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; +import { Angular2SmartTableModule } from 'angular2-smart-table'; +import { NgxPermissionsModule } from 'ngx-permissions'; +import { LanguagesEnum } from '@gauzy/contracts'; +import { PageRouteService } from '@gauzy/ui-core/core'; +import { HttpLoaderFactory } from '@gauzy/ui-core/i18n'; +import { + GauzyButtonActionModule, + PaginationV2Module, + SharedModule, + SmartTableToggleModule +} from '@gauzy/ui-core/shared'; +import { createRoutes } from './job-employee.routes'; +import { JobEmployeeComponent } from './components/job-employee/job-employee.component'; + +/** + * Nebular modules + */ +const NB_MODULES = [NbButtonModule, NbCardModule, NbIconModule, NbSpinnerModule, NbTabsetModule, NbToggleModule]; + +/* + * Third party modules + */ +const THIRD_PARTY_MODULES = [ + NgxPermissionsModule.forRoot(), + TranslateModule.forRoot({ + defaultLanguage: LanguagesEnum.ENGLISH, + loader: { + provide: TranslateLoader, + useFactory: HttpLoaderFactory, + deps: [HttpClient] + } + }) +]; + +@NgModule({ + declarations: [JobEmployeeComponent], + imports: [ + RouterModule.forChild([]), + ...NB_MODULES, + ...THIRD_PARTY_MODULES, + Angular2SmartTableModule, + GauzyButtonActionModule, + PaginationV2Module, + SharedModule, + SmartTableToggleModule + ], + providers: [ + { + provide: ROUTES, + useFactory: (pageRouteService: PageRouteService) => createRoutes(pageRouteService), + deps: [PageRouteService], + multi: true + } + ] +}) +export class JobEmployeeModule { + private static hasRegisteredPageRoutes = false; // Flag to check if routes have been registered + + constructor(@Inject(PageRouteService) private readonly _pageRouteService: PageRouteService) { + // Register the routes + this.registerRoutes(this._pageRouteService); + } + + /** + * Called when the plugin is bootstrapped. + * + * @returns {void | Promise} + * @memberof JobEmployeeModule + */ + onPluginBootstrap(): void | Promise { + console.log(`${JobEmployeeModule.name} is being bootstrapped...`); + } + + /** + * Register routes for the JobEmployeeModule + * + * @param _pageRouteService + * @returns {void} + */ + registerRoutes(_pageRouteService: PageRouteService): void { + if (JobEmployeeModule.hasRegisteredPageRoutes) { + return; + } + + // Register Job Employee Page Routes + _pageRouteService.registerPageRoute({ + // Register the location 'jobs' + location: 'jobs', + // Register the path 'employee' + path: 'employee', + // Register the loadChildren function to load the EmployeesModule lazy module + loadChildren: () => import('./job-employee.module').then((m) => m.JobEmployeeModule), + // Register the data object + data: { + selectors: { + date: true, + employee: true, + project: false, + team: false + } + } + }); + + // Set hasRegisteredRoutes to true + JobEmployeeModule.hasRegisteredPageRoutes = true; + } + + /** + * Called when the plugin is destroyed. + * + * @returns {void | Promise} + * @memberof JobEmployeeModule + */ + onPluginDestroy(): void | Promise { + console.log(`${JobEmployeeModule.name} is being destroyed...`); + } +} diff --git a/packages/plugins/job-employee-ui/src/lib/job-employee.routes.ts b/packages/plugins/job-employee-ui/src/lib/job-employee.routes.ts new file mode 100644 index 00000000000..7049371d618 --- /dev/null +++ b/packages/plugins/job-employee-ui/src/lib/job-employee.routes.ts @@ -0,0 +1,24 @@ +import { Route } from '@angular/router'; +import { PermissionsEnum } from '@gauzy/contracts'; +import { PageRouteService, PermissionsGuard } from '@gauzy/ui-core/core'; +import { JobEmployeeComponent } from './components/job-employee/job-employee.component'; + +/** + * Creates jobs employee routes for the application + * + * @param _pageRouteService An instance of PageRouteService + * @returns An array of Route objects + */ +export const createRoutes = (_pageRouteService: PageRouteService): Route[] => [ + { + path: '', + component: JobEmployeeComponent, + canActivate: [PermissionsGuard], + data: { + permissions: { + only: [PermissionsEnum.ORG_JOB_EMPLOYEE_VIEW], + redirectTo: '/pages/jobs/search' + } + } + } +]; diff --git a/packages/plugins/job-employee-ui/src/lib/public-api.ts b/packages/plugins/job-employee-ui/src/lib/public-api.ts index 499224397f7..0ced87e03ed 100644 --- a/packages/plugins/job-employee-ui/src/lib/public-api.ts +++ b/packages/plugins/job-employee-ui/src/lib/public-api.ts @@ -1,4 +1,6 @@ /** * Public API Surface of job-employee-ui */ -export const placeholders = '@gauzy/plugin-job-employee-ui'; +export * from './job-employee.module'; +export * from './job-employee.routes'; +export * from './components/job-employee/job-employee.component'; From 423c6ca5136da4ce794482452b5bb4b5a5d81a2c Mon Sep 17 00:00:00 2001 From: "Rahul R." Date: Mon, 5 Aug 2024 19:18:57 +0530 Subject: [PATCH 3/6] fix: added coming soon message --- .../job-employee/job-employee.component.html | 13 +++++++++++-- .../job-employee-ui/src/lib/job-employee.module.ts | 2 +- .../work-in-progress/work-in-progress.component.ts | 2 +- .../lib/work-in-progress/work-in-progress.module.ts | 3 ++- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.html b/packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.html index 4b5c51cff3b..3ba920d4393 100644 --- a/packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.html +++ b/packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.html @@ -22,10 +22,10 @@

- + - + @@ -107,3 +107,12 @@

+ + +
+
+ +
{{ 'COMING_SOON' | translate }}
+
+
+
diff --git a/packages/plugins/job-employee-ui/src/lib/job-employee.module.ts b/packages/plugins/job-employee-ui/src/lib/job-employee.module.ts index af222790326..edaf670eed8 100644 --- a/packages/plugins/job-employee-ui/src/lib/job-employee.module.ts +++ b/packages/plugins/job-employee-ui/src/lib/job-employee.module.ts @@ -51,9 +51,9 @@ const THIRD_PARTY_MODULES = [ ...NB_MODULES, ...THIRD_PARTY_MODULES, Angular2SmartTableModule, + SharedModule, GauzyButtonActionModule, PaginationV2Module, - SharedModule, SmartTableToggleModule ], providers: [ diff --git a/packages/ui-core/shared/src/lib/work-in-progress/work-in-progress.component.ts b/packages/ui-core/shared/src/lib/work-in-progress/work-in-progress.component.ts index 413f096bc3c..4e242bc77ef 100644 --- a/packages/ui-core/shared/src/lib/work-in-progress/work-in-progress.component.ts +++ b/packages/ui-core/shared/src/lib/work-in-progress/work-in-progress.component.ts @@ -4,7 +4,7 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; selector: 'ga-wip', template: `
-
+
{{ 'COMING_SOON' | translate }}
diff --git a/packages/ui-core/shared/src/lib/work-in-progress/work-in-progress.module.ts b/packages/ui-core/shared/src/lib/work-in-progress/work-in-progress.module.ts index 3b412bc6a49..4d91462dcbb 100644 --- a/packages/ui-core/shared/src/lib/work-in-progress/work-in-progress.module.ts +++ b/packages/ui-core/shared/src/lib/work-in-progress/work-in-progress.module.ts @@ -1,4 +1,5 @@ import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; import { ROUTES, RouterModule } from '@angular/router'; import { NbCardModule, NbIconModule } from '@nebular/theme'; import { TranslateModule } from '@ngx-translate/core'; @@ -7,7 +8,7 @@ import { WorkInProgressComponent } from './work-in-progress.component'; import { createRoutes } from './work-in-progress.routes'; @NgModule({ - imports: [RouterModule.forChild([]), NbCardModule, NbIconModule, TranslateModule.forChild()], + imports: [CommonModule, RouterModule.forChild([]), NbCardModule, NbIconModule, TranslateModule.forChild()], declarations: [WorkInProgressComponent], exports: [WorkInProgressComponent], providers: [ From 7366fa9154600268e3e6bdf89f715eecc2d5c1af Mon Sep 17 00:00:00 2001 From: "Rahul R." Date: Mon, 5 Aug 2024 19:26:06 +0530 Subject: [PATCH 4/6] fix: docker build command --- .deploy/api/Dockerfile | 6 ++++-- .deploy/webapp/Dockerfile | 3 ++- apps/desktop/src/package.json | 1 + apps/server/src/package.json | 1 + 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.deploy/api/Dockerfile b/.deploy/api/Dockerfile index 86c95fd4a68..84e9fd57eea 100644 --- a/.deploy/api/Dockerfile +++ b/.deploy/api/Dockerfile @@ -161,8 +161,9 @@ COPY --chown=node:node packages/plugins/knowledge-base/package.json ./packages/p COPY --chown=node:node packages/plugins/changelog/package.json ./packages/plugins/changelog/ COPY --chown=node:node packages/plugins/job-search/package.json ./packages/plugins/job-search/ COPY --chown=node:node packages/plugins/job-proposal/package.json ./packages/plugins/job-proposal/ -COPY --chown=node:node packages/plugins/job-search-ui/package.json ./packages/plugins/job-search-ui/ +COPY --chown=node:node packages/plugins/job-employee-ui/package.json ./packages/plugins/job-employee-ui/ COPY --chown=node:node packages/plugins/job-matching-ui/package.json ./packages/plugins/job-matching-ui/ +COPY --chown=node:node packages/plugins/job-search-ui/package.json ./packages/plugins/job-search-ui/ COPY --chown=node:node packages/ui-core/package.json ./packages/ui-core/ COPY --chown=node:node packages/ui-config/package.json ./packages/ui-config/ COPY --chown=node:node packages/ui-auth/package.json ./packages/ui-auth/ @@ -224,8 +225,9 @@ COPY --chown=node:node packages/plugins/knowledge-base/package.json ./packages/p COPY --chown=node:node packages/plugins/changelog/package.json ./packages/plugins/changelog/ COPY --chown=node:node packages/plugins/job-search/package.json ./packages/plugins/job-search/ COPY --chown=node:node packages/plugins/job-proposal/package.json ./packages/plugins/job-proposal/ -COPY --chown=node:node packages/plugins/job-search-ui/package.json ./packages/plugins/job-search-ui/ +COPY --chown=node:node packages/plugins/job-employee-ui/package.json ./packages/plugins/job-employee-ui/ COPY --chown=node:node packages/plugins/job-matching-ui/package.json ./packages/plugins/job-matching-ui/ +COPY --chown=node:node packages/plugins/job-search-ui/package.json ./packages/plugins/job-search-ui/ COPY --chown=node:node packages/ui-core/package.json ./packages/ui-core/ COPY --chown=node:node packages/ui-config/package.json ./packages/ui-config/ COPY --chown=node:node packages/ui-auth/package.json ./packages/ui-auth/ diff --git a/.deploy/webapp/Dockerfile b/.deploy/webapp/Dockerfile index 568394a9900..adb1b3acfa3 100644 --- a/.deploy/webapp/Dockerfile +++ b/.deploy/webapp/Dockerfile @@ -101,8 +101,9 @@ COPY --chown=node:node packages/plugins/product-reviews/package.json ./packages/ COPY --chown=node:node packages/plugins/knowledge-base/package.json ./packages/plugins/knowledge-base/ COPY --chown=node:node packages/plugins/changelog/package.json ./packages/plugins/changelog/ COPY --chown=node:node packages/plugins/job-proposal/package.json ./packages/plugins/job-proposal/ -COPY --chown=node:node packages/plugins/job-search-ui/package.json ./packages/plugins/job-search-ui/ +COPY --chown=node:node packages/plugins/job-employee-ui/package.json ./packages/plugins/job-employee-ui/ COPY --chown=node:node packages/plugins/job-matching-ui/package.json ./packages/plugins/job-matching-ui/ +COPY --chown=node:node packages/plugins/job-search-ui/package.json ./packages/plugins/job-search-ui/ COPY --chown=node:node packages/ui-core/package.json ./packages/ui-core/ COPY --chown=node:node packages/ui-config/package.json ./packages/ui-config/ COPY --chown=node:node packages/ui-auth/package.json ./packages/ui-auth/ diff --git a/apps/desktop/src/package.json b/apps/desktop/src/package.json index 795124fb402..dd710da28f3 100644 --- a/apps/desktop/src/package.json +++ b/apps/desktop/src/package.json @@ -42,6 +42,7 @@ "../../../packages/plugins/sentry-tracing", "../../../packages/plugins/job-search", "../../../packages/plugins/job-proposal", + "../../../packages/plugins/job-employee-ui", "../../../packages/plugins/job-matching-ui", "../../../packages/plugins/job-search-ui" ] diff --git a/apps/server/src/package.json b/apps/server/src/package.json index 77866221840..54e78f3f03a 100755 --- a/apps/server/src/package.json +++ b/apps/server/src/package.json @@ -43,6 +43,7 @@ "../../../packages/plugins/sentry-tracing", "../../../packages/plugins/job-search", "../../../packages/plugins/job-proposal", + "../../../packages/plugins/job-employee-ui", "../../../packages/plugins/job-matching-ui", "../../../packages/plugins/job-search-ui" ] From a9d3cb7f44183611ec9305934736fb38cd8233f2 Mon Sep 17 00:00:00 2001 From: "Rahul R." Date: Mon, 5 Aug 2024 19:59:06 +0530 Subject: [PATCH 5/6] fix: update employee minimumBillingRate & billRateValue --- .../job-employee/job-employee.component.ts | 7 ++- .../editors/number-editor.component.ts | 58 ++++++++++++------- 2 files changed, 42 insertions(+), 23 deletions(-) diff --git a/packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.ts b/packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.ts index 826078fb6ec..9f43992b9b8 100644 --- a/packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.ts +++ b/packages/plugins/job-employee-ui/src/lib/components/job-employee/job-employee.component.ts @@ -392,14 +392,15 @@ export class JobEmployeeComponent extends PaginationFilterBaseComponent implemen // Destructure properties for clarity. const { id: organizationId, tenantId } = this.organization; - + // Get the employee ID from the event data const employeeId = event.data?.id; + // Get the new data from the event const { billRateValue, minimumBillingRate } = event.newData ?? {}; // Update employee bill rates. await this._employeesService.updateProfile(employeeId, { - minimumBillingRate, - billRateValue, + minimumBillingRate: +minimumBillingRate, + billRateValue: +billRateValue, tenantId, organizationId }); diff --git a/packages/ui-core/shared/src/lib/table-components/editors/number-editor.component.ts b/packages/ui-core/shared/src/lib/table-components/editors/number-editor.component.ts index 896587683b3..9e107e8ea9e 100644 --- a/packages/ui-core/shared/src/lib/table-components/editors/number-editor.component.ts +++ b/packages/ui-core/shared/src/lib/table-components/editors/number-editor.component.ts @@ -2,29 +2,47 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { Cell, DefaultEditor } from 'angular2-smart-table'; @Component({ - template: ``, + template: `` }) export class NumberEditorComponent extends DefaultEditor implements OnInit { + cellValue!: number; - @Input() cell!: Cell; - @Output() onConfirm: EventEmitter = new EventEmitter(); + @Input() cell!: Cell; + @Output() onConfirm: EventEmitter = new EventEmitter(); - constructor() { - super(); - } + constructor() { + super(); + } - ngOnInit() { - if (this.cell.getValue()) { - this.cell.setValue(this.cell.getNewRawValue()); - } - // if (this.cell.value) { - // this.cell.value = +this.cell.value; // Convert the input to a number - // } - } + ngOnInit() { + // Get the value from the cell + if (this.cell.getValue()) { + // Set the cell value to the new raw value + this.cellValue = this.cell.getNewRawValue(); + // Set the value on the cell + this.cell.setValue(this.cell.getNewRawValue()); + } + } + + /** + * Handles the input change event. + * + * @param event - The input change event. + */ + onInputChange(event: Event): void { + // Get the input element + const inputElement = event.target as HTMLInputElement; + // Get the value from the input element + const value = inputElement.value; + + // Set the value on the cell + this.cell.setValue(value); + } } From 1c832e91ddfe683ed0d9001af3fa21db15010029 Mon Sep 17 00:00:00 2001 From: "Rahul R." Date: Mon, 5 Aug 2024 20:02:29 +0530 Subject: [PATCH 6/6] fix: updated package.json --- packages/plugins/job-employee-ui/package.json | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/plugins/job-employee-ui/package.json b/packages/plugins/job-employee-ui/package.json index 13589345ca6..7a5cd6c74c2 100644 --- a/packages/plugins/job-employee-ui/package.json +++ b/packages/plugins/job-employee-ui/package.json @@ -2,7 +2,7 @@ "name": "@gauzy/plugin-job-employee-ui", "version": "0.1.0", "type": "commonjs", - "description": "", + "description": "A plugin for managing job and employee UI functionalities in the Ever Gauzy platform.", "author": { "name": "Ever Co. LTD", "email": "ever@ever.co", @@ -17,7 +17,15 @@ "url": "https://github.com/ever-co/ever-gauzy/issues" }, "homepage": "https://ever.co", - "keywords": [], + "keywords": [ + "Angular", + "UI", + "plugin", + "Ever Gauzy", + "job", + "employee", + "management" + ], "private": true, "scripts": { "lib:build": "ng build plugin-job-employee-ui --configuration=development",