Merged in feature/IO-3512-Page-Titles (pull request #2889)

IO-3512 Page Title

Approved-by: Dave Richer
This commit is contained in:
Allan Carr
2026-01-26 14:54:58 +00:00
committed by Dave Richer
20 changed files with 89 additions and 52 deletions

View File

@@ -169,7 +169,13 @@ export function AccountingPayablesTableComponent({ bodyshop, loading, bills, ref
refetch={refetch}
/>
{bodyshop.accountingconfig && bodyshop.accountingconfig.qbo && <QboAuthorizeComponent />}
<Input value={state.search} onChange={handleSearch} placeholder={t("general.labels.search")} allowClear />
<Input
value={state.search}
onChange={handleSearch}
placeholder={t("general.labels.search")}
allowClear
enterButton
/>
</Space>
}
>

View File

@@ -182,7 +182,13 @@ export function AccountingPayablesTableComponent({ bodyshop, loading, payments,
refetch={refetch}
/>
{bodyshop.accountingconfig && bodyshop.accountingconfig.qbo && <QboAuthorizeComponent />}
<Input value={state.search} onChange={handleSearch} placeholder={t("general.labels.search")} allowClear />
<Input
value={state.search}
onChange={handleSearch}
placeholder={t("general.labels.search")}
allowClear
enterButton
/>
</Space>
}
>

View File

@@ -204,6 +204,7 @@ export function AccountingReceivablesTableComponent({ bodyshop, loading, jobs, r
onChange={handleSearch}
placeholder={t("general.labels.search")}
allowClear
enterButton
/>
</Space>
}

View File

@@ -232,6 +232,7 @@ export function BillsListTableComponent({
e.preventDefault();
setSearchText(e.target.value);
}}
enterButton
/>
</Space>
}

View File

@@ -99,6 +99,7 @@ export default function ContractsCarsComponent({ loading, data, selectedCarId, h
placeholder={t("general.labels.search")}
value={state.search}
onChange={(e) => setState({ ...state, search: e.target.value })}
enterButton
/>
}
>

View File

@@ -123,6 +123,7 @@ export default function ContractsJobsComponent({ loading, data, selectedJob, han
placeholder={t("general.labels.search")}
value={state.search}
onChange={(e) => setState({ ...state, search: e.target.value })}
enterButton
/>
}
>

View File

@@ -164,6 +164,7 @@ export function ContractsList({ bodyshop, loading, contracts, refetch, total, se
const updatedSearch = { ...search, search: value };
history({ search: queryString.stringify(updatedSearch) });
}}
enterButton
/>
</Space>
}

View File

@@ -682,6 +682,7 @@ export function JobLinesComponent({
e.preventDefault();
setSearchText(e.target.value);
}}
enterButton
/>
</Space>
}

View File

@@ -136,6 +136,7 @@ export function JobsAvailableScan({ partnerVersion, refetch }) {
onChange={(e) => {
setSearchText(e.currentTarget.value);
}}
enterButton
/>
</Space>
}

View File

@@ -196,13 +196,16 @@ export function JobsAvailableComponent({ bodyshop, loading, data, refetch, addJo
>
{t("general.actions.deleteall")}
</Button>
<Input.Search
placeholder={t("general.labels.search")}
onChange={(e) => {
setSearchText(e.currentTarget.value);
}}
enterButton
/>
<Link to="/manage/jobs/new">
<Button>{t("jobs.actions.manualnew")}</Button>
</Link>
</Space>
}
>

View File

@@ -101,6 +101,7 @@ export function PartDispatchTableComponent({ bodyshop, job, billsQuery }) {
e.preventDefault();
setSearchText(e.target.value);
}}
enterButton
/>
</Space>
}

View File

@@ -295,6 +295,7 @@ export function PartsOrderListTableComponent({
e.preventDefault();
setSearchText(e.target.value);
}}
enterButton
/>
</Space>
}

View File

@@ -269,6 +269,7 @@ export function PartsQueueListComponent({ bodyshop }) {
return (
<Card
title={t("titles.bc.parts-queue")}
extra={
<Space wrap>
<Button onClick={() => refetch()}>

View File

@@ -45,6 +45,7 @@ export function ProductionBoardFilters({ bodyshop, filter, setFilter, loading })
setFilter({ ...filter, search: e.target.value });
logImEXEvent("visual_board_filter_search", { search: e.target.value });
}}
enterButton
/>
<EmployeeSearchSelectComponent
style={{ minWidth: "20rem" }}

View File

@@ -44,6 +44,7 @@ export default function ProfileShopsComponent({ loading, data, updateActiveShop
onChange={(e) => setSearch(e.target.value)}
allowClear
placeholder={t("general.labels.search")}
enterButton
/>
}
>

View File

@@ -3,8 +3,7 @@ import { Button, Form, Input, InputNumber, Select, Space, Switch } from "antd";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import { selectBodyshop } from "../../redux/user/user.selectors";
import FeatureWrapper, { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component";
import FeatureWrapper from "../feature-wrapper/feature-wrapper.component";
import CurrencyInput from "../form-items-formatted/currency-form-item.component";
import FormItemEmail from "../form-items-formatted/email-form-item.component";
import PhoneFormItem, { PhoneItemFormatterValidation } from "../form-items-formatted/phone-form-item.component";
@@ -12,15 +11,13 @@ import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.c
import LayoutFormRow from "../layout-form-row/layout-form-row.component";
const timeZonesList = Intl.supportedValuesOf("timeZone");
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop
});
const mapStateToProps = createStructuredSelector({});
const mapDispatchToProps = () => ({
//setUserLanguage: language => dispatch(setUserLanguage(language))
});
export default connect(mapStateToProps, mapDispatchToProps)(ShopInfoGeneral);
export function ShopInfoGeneral({ form, bodyshop }) {
export function ShopInfoGeneral({ form }) {
const { t } = useTranslation();
return (
@@ -378,34 +375,6 @@ export function ShopInfoGeneral({ form, bodyshop }) {
>
<Select mode="tags" />
</Form.Item>,
...(HasFeatureAccess({ featureName: "timetickets", bodyshop })
? [
<Form.Item
key="tt_allow_post_to_invoiced"
name={["tt_allow_post_to_invoiced"]}
label={t("bodyshop.fields.tt_allow_post_to_invoiced")}
valuePropName="checked"
>
<Switch />
</Form.Item>,
<Form.Item
key="tt_enforce_hours_for_tech_console"
name={["tt_enforce_hours_for_tech_console"]}
label={t("bodyshop.fields.tt_enforce_hours_for_tech_console")}
valuePropName="checked"
>
<Switch />
</Form.Item>,
<Form.Item
key="bill_allow_post_to_closed"
name={["bill_allow_post_to_closed"]}
label={t("bodyshop.fields.bill_allow_post_to_closed")}
valuePropName="checked"
>
<Switch />
</Form.Item>
]
: []),
<Form.Item
key="md_ded_notes"
name={["md_ded_notes"]}

View File

@@ -313,6 +313,38 @@ export function ShopInfoResponsibilityCenterComponent({ bodyshop, form }) {
>
<Select mode="tags" />
</Form.Item>,
...(HasFeatureAccess({ featureName: "timetickets", bodyshop })
? [
<Form.Item
key="tt_allow_post_to_invoiced"
name={["tt_allow_post_to_invoiced"]}
label={t("bodyshop.fields.tt_allow_post_to_invoiced")}
valuePropName="checked"
>
<Switch />
</Form.Item>,
<Form.Item
key="tt_enforce_hours_for_tech_console"
name={["tt_enforce_hours_for_tech_console"]}
label={t("bodyshop.fields.tt_enforce_hours_for_tech_console")}
valuePropName="checked"
>
<Switch />
</Form.Item>
]
: []),
...(HasFeatureAccess({ featureName: "bills", bodyshop })
? [
<Form.Item
key="bill_allow_post_to_closed"
name={["bill_allow_post_to_closed"]}
label={t("bodyshop.fields.bill_allow_post_to_closed")}
valuePropName="checked"
>
<Switch />
</Form.Item>
]
: []),
...(HasFeatureAccess({ featureName: "export", bodyshop })
? [
...(ClosingPeriod.treatment === "on"

View File

@@ -181,6 +181,7 @@ export function ExportLogsPageComponent() {
searchParams.search = value;
history({ search: queryString.stringify(searchParams) });
}}
enterButton
/>
</Space>
}

View File

@@ -4,7 +4,6 @@ import { PageHeader } from "@ant-design/pro-layout";
import { useEffect } from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { Link } from "react-router-dom";
import { createStructuredSelector } from "reselect";
import AlertComponent from "../../components/alert/alert.component";
import JobsAvailableTableContainer from "../../components/jobs-available-table/jobs-available-table.container";
@@ -25,6 +24,26 @@ const mapDispatchToProps = (dispatch) => ({
export function JobsAvailablePageContainer({ partnerVersion, setBreadcrumbs, setSelectedHeader }) {
const { t } = useTranslation();
const getOS = () => {
const userAgent = navigator.userAgent;
if (userAgent.indexOf("Win") !== -1) return "windows";
if (userAgent.indexOf("Mac") !== -1) return "mac";
if (userAgent.indexOf("Linux") !== -1) return "linux";
return "unknown";
};
const os = getOS();
const downloadUrl = InstanceRenderManager({
imex:
os === "windows"
? "https://imex-partner.s3.ca-central-1.amazonaws.com/imex-partner-x64.exe"
: "https://imex-partner.s3.ca-central-1.amazonaws.com/imex-partner-arm64.dmg",
rome:
os === "windows"
? "https://rome-partner.s3.us-east-2.amazonaws.com/rome-partner-x64.exe"
: "https://rome-partner.s3.us-east-2.amazonaws.com/rome-partner-arm64.dmg"
});
useEffect(() => {
document.title = t("titles.jobsavailable", {
app: InstanceRenderManager({
@@ -39,24 +58,12 @@ export function JobsAvailablePageContainer({ partnerVersion, setBreadcrumbs, set
return (
<RbacWrapper action="jobs:available-list">
<div>
<PageHeader
title={t("titles.bc.availablejobs")}
extra={
<Link to="/manage/jobs/new">
<Button>{t("jobs.actions.manualnew")}</Button>
</Link>
}
/>
<PageHeader />
{!partnerVersion && (
<AlertComponent
type="warning"
action={
<a
href={InstanceRenderManager({
imex: "https://partner.imex.online/Setup.exe",
rome: "https://partner.romeonline.io/Setup.exe"
})}
>
<a href={downloadUrl}>
<Button size="small">{t("general.actions.download")}</Button>
</a>
}

View File

@@ -167,6 +167,7 @@ export function PhonebookPageComponent({ bodyshop, authLevel }) {
searchParams.page = 1;
history({ search: queryString.stringify(searchParams) });
}}
enterButton
/>
</Space>
}