Skip to main content

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​

PluginTab / PageURLPermission
JobsPluginJobs (parent layout)/pages/jobsFEATURE_JOB
JobEmployeePluginEmployee tab/pages/jobs/employeeORG_JOB_EMPLOYEE_VIEW
JobSearchPluginBrowse tab/pages/jobs/searchORG_JOB_SEARCH
JobMatchingPluginMatching tab/pages/jobs/matchingORG_JOB_MATCHING_VIEW
JobProposalTemplatePluginProposal Template tab/pages/jobs/proposal-templateORG_PROPOSAL_TEMPLATES_VIEW
JobProposalPluginProposals page (Sales)/pages/sales/proposalsORG_PROPOSALS_VIEW
note

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)​

PropertyValue
Plugin IDjobs
Package@gauzy/plugin-jobs-ui
Version1.0.0
Locationpage-sections
Feature KeyFEATURE_JOB
TypeModule-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 };
}
};

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: