Admin Panel
tests / ci (push) Canceled after 0s

This commit is contained in:
2026-09-29 14:57:37 +07:00
parent 04fbddba13
commit 8c6dad2a31
94 changed files with 4864 additions and 1151 deletions
+40 -8
View File
@@ -40,6 +40,7 @@ const id = {
clients: 'Daftar Klien Industri',
audit: 'Permintaan Audit Sistem',
offices: 'Lokasi Kantor PAJ',
admin: 'Admin Panel',
},
rights: 'Hak Cipta Dilindungi Undang-Undang.',
location: 'Jakarta Selatan, Indonesia',
@@ -142,6 +143,19 @@ const id = {
badge: 'KONSULTASI TEKNIS & AUDIT INFRASTRUKTUR',
tel: 'Telp',
},
login: {
pageTitle: 'Masuk Admin Panel',
title: 'Masuk ke Admin Panel',
description: 'Masukkan email dan password akun admin Anda.',
email: 'Email',
emailPlaceholder: 'nama@probindo.com',
password: 'Password',
passwordPlaceholder: 'Password',
forgot: 'Lupa password?',
remember: 'Ingat saya',
submit: 'Masuk',
back: 'Kembali ke website',
},
};
const en: typeof id = {
@@ -172,6 +186,7 @@ const en: typeof id = {
clients: 'Industry Clients',
audit: 'Request a System Audit',
offices: 'PAJ Office Locations',
admin: 'Admin Panel',
},
rights: 'All rights reserved.',
location: 'South Jakarta, Indonesia',
@@ -274,15 +289,32 @@ const en: typeof id = {
badge: 'TECHNICAL CONSULTATION & INFRASTRUCTURE AUDIT',
tel: 'Tel',
},
login: {
pageTitle: 'Admin Panel Login',
title: 'Log in to the Admin Panel',
description: 'Enter the email and password of your admin account.',
email: 'Email',
emailPlaceholder: 'name@probindo.com',
password: 'Password',
passwordPlaceholder: 'Password',
forgot: 'Forgot password?',
remember: 'Remember me',
submit: 'Log in',
back: 'Back to website',
},
};
export const common: Localized<typeof id> = { id, en };
/** Options for the "service needed" select in every consultation form. */
export const serviceOptions = (content: typeof id) => [
...content.services.map((service, index) => ({
value: `service-${index + 1}`,
label: `${index + 1}. ${service.expansion ? `${service.title} (${service.expansion})` : service.title}`,
})),
...content.extraServiceOptions,
];
/**
* Options for the "service needed" select in every consultation form. The
* submitted value is the label itself, so the admin inbox reads naturally.
*/
export const serviceOptions = (content: typeof id) =>
[
...content.services.map(
(service, index) =>
`${index + 1}. ${service.expansion ? `${service.title} (${service.expansion})` : service.title}`,
),
...content.extraServiceOptions.map((option) => option.label),
].map((label) => ({ value: label, label }));