Jobs UI Plugins
The Jobs plugin system provides the frontend for job management in Ever Gauzy. It uses a parent-child plugin group architecture where JobsPlugin is the parent and child plugins contribute individual tabs and pages.
Architectureβ
Plugin Group Overviewβ
| Plugin | Tab / Page | URL | Permission |
|---|---|---|---|
| JobsPlugin | Jobs (parent layout) | /pages/jobs | FEATURE_JOB |
| JobEmployeePlugin | Employee tab | /pages/jobs/employee | ORG_JOB_EMPLOYEE_VIEW |
| JobSearchPlugin | Browse tab | /pages/jobs/search | ORG_JOB_SEARCH |
| JobMatchingPlugin | Matching tab | /pages/jobs/matching | ORG_JOB_MATCHING_VIEW |
| JobProposalTemplatePlugin | Proposal Template tab | /pages/jobs/proposal-template | ORG_PROPOSAL_TEMPLATES_VIEW |
| JobProposalPlugin | Proposals page (Sales) | /pages/sales/proposals | ORG_PROPOSALS_VIEW |
JobProposalPlugin registers under sales-sections (not jobs-sections), so it appears in the Sales menu rather than the Jobs menu. It is still passed as a child in plugin-ui.config.ts for organizational purposes.
Registrationβ
All Jobs plugins are registered together via the .init() pattern in plugin-ui.config.ts:
// apps/gauzy/src/plugin-ui.config.ts
import { JobsPlugin } from '@gauzy/plugin-jobs-ui';
import { JobProposalPlugin, JobProposalTemplatePlugin } from '@gauzy/plugin-job-proposal-ui';
import { JobEmployeePlugin } from '@gauzy/plugin-job-employee-ui';
import { JobSearchPlugin } from '@gauzy/plugin-job-search-ui';
import { JobMatchingPlugin } from '@gauzy/plugin-job-matching-ui';
export const uiPluginConfig: PluginUiConfig = {
plugins: [
JobsPlugin.init({
plugins: [
JobProposalPlugin,
JobEmployeePlugin,
JobSearchPlugin,
JobMatchingPlugin,
JobProposalTemplatePlugin
]
}),
// ...
]
};
The .init() method lets each deployment choose which child plugins to include. Omit a child to disable that tab.
JobsPlugin (Parent)β
| Property | Value |
|---|---|
| Plugin ID | jobs |
| Package | @gauzy/plugin-jobs-ui |
| Version | 1.0.0 |
| Location | page-sections |
| Feature Key | FEATURE_JOB |
| Type | Module-based plugin group |
Plugin Definitionβ
export interface JobsPluginDefinition extends PluginUiDefinition {
init(opts: { plugins: PluginUiDefinition[] }): PluginUiDefinition;
}
export const JobsPlugin: JobsPluginDefinition = {
id: 'jobs',
version: '1.0.0',
location: 'page-sections',
module: JobsModule,
routes: [JOBS_PAGE_ROUTE as PluginRouteInput],
navMenu: [{
type: 'config',
config: {
id: 'jobs',
title: 'Jobs',
icon: 'fas fa-briefcase',
link: '/pages/jobs',
data: {
translationKey: 'MENU.JOBS',
featureKey: FeatureEnum.FEATURE_JOB
},
items: []
},
before: 'employees'
}],
featureKey: FeatureEnum.FEATURE_JOB,
plugins: [],
init(opts: { plugins: PluginUiDefinition[] }): PluginUiDefinition {
return { ...JobsPlugin, plugins: opts.plugins };
}
};
Navigationβ
Adds a Jobs menu item to the sidebar, positioned before "Employees", with the briefcase icon. Only visible when the FEATURE_JOB feature flag is enabled.
Route Structureβ
/pages/jobs
βββ JobLayoutComponent (tabset wrapper)
βββ /employee β JobEmployeePlugin
βββ /search β JobSearchPlugin
βββ /matching β JobMatchingPlugin
βββ /proposal-template β JobProposalTemplatePlugin
Default redirect: /pages/jobs β /pages/jobs/employee
Child Pluginsβ
Each child plugin is documented on its own page:
- JobEmployeePlugin β Employee job listings and assignments
- JobSearchPlugin β Browse and search job listings
- JobMatchingPlugin β AI-powered job-candidate matching
- JobProposalPlugin β Job proposal management (Sales section)
- JobProposalTemplatePlugin β Reusable proposal templates
Relatedβ
- Plugin UI System β how UI plugins work
- Plugin Definitions β plugin group pattern
- Getting Started β create your own plugin