Files
tehran_tala/apps/admin-panel/src/components/icons.ts
T
s.esmaeiliandClaude Sonnet 5 02d92fc465 admin-panel: add shared modal/header/icon/delete-handler components
New src/components/common/:
- BaseFormModal.vue — the standard shell every converted add/edit modal will
  use: header=title, footer=buttons, body=form. Replaces the ad-hoc
  60%/70%/80% <a-modal> widths used across the codebase with 4 named sizes.
- ListPageHeader.vue — the add button that goes above every list page,
  gated on the same rid the create route used (modelled on the one place
  this already existed, ListUser.vue's add-user button).

New src/components/icons.ts: the legacy-Feather-name -> ant-icon map,
extracted out of TooltipBtn.vue so the sidebar can resolve the same names
through the same map instead of a second copy.

New src/composables/useDeleteHandler.ts: the delete-then-refetch-then-toast
handler that was copy-pasted verbatim in 6 list views (city/cityList.vue,
user/ListUser.vue, apps/category/List.vue, finical/list.vue,
apps/product/ProductList.vue, manage/Const.vue). Preserves each site's exact
success-message wording and message.success/info choice, and ProductList's
irregular POST-based delete endpoint.

Verified: pnpm build passes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-14 15:18:17 +03:30

82 lines
2.2 KiB
TypeScript

// Shared legacy-Feather-name -> ant-design-vue icon map.
//
// Originally lived only inside TooltipBtn.vue (row-action icons). Extracted
// here so the sidebar (navMenuItems.ts icon: values) can resolve the SAME
// names through the SAME map instead of duplicating it — one source of
// truth for "legacy Feather icon name" -> "ant component" across the app.
import {
AppstoreOutlined,
BarChartOutlined,
BellOutlined,
BlockOutlined,
BookOutlined,
CameraOutlined,
CheckOutlined,
CloseOutlined,
CreditCardOutlined,
DeleteOutlined,
DollarOutlined,
EditOutlined,
EyeOutlined,
FileOutlined,
FileTextOutlined,
GiftOutlined,
HomeOutlined,
InboxOutlined,
MailOutlined,
MessageOutlined,
PercentageOutlined,
PlusOutlined,
SettingOutlined,
ShoppingOutlined,
StopOutlined,
TeamOutlined,
UnorderedListOutlined,
UserAddOutlined,
UserOutlined,
} from '@ant-design/icons-vue';
/** legacy Feather name -> ant component. */
export const ICONS: Record<string, unknown> = {
// row-action icons (TooltipBtn.vue's original set)
ListIcon: UnorderedListOutlined,
FileIcon: FileOutlined,
TrashIcon: DeleteOutlined,
EditIcon: EditOutlined,
CheckIcon: CheckOutlined,
CameraIcon: CameraOutlined,
EyeIcon: EyeOutlined,
PlusIcon: PlusOutlined,
XIcon: CloseOutlined,
FileTextIcon: FileTextOutlined,
// sidebar icons (navMenuItems.ts), added when the sidebar started
// rendering them for the first time
HomeIcon: HomeOutlined,
PackageIcon: InboxOutlined,
UserIcon: UserOutlined,
UsersIcon: TeamOutlined,
UserPlusIcon: UserAddOutlined,
ShoppingBagIcon: ShoppingOutlined,
BoxIcon: InboxOutlined,
GridIcon: AppstoreOutlined,
LayersIcon: BlockOutlined,
CreditCardIcon: CreditCardOutlined,
DollarSignIcon: DollarOutlined,
PercentIcon: PercentageOutlined,
GiftIcon: GiftOutlined,
SlashIcon: StopOutlined,
BookIcon: BookOutlined,
MessageSquareIcon: MessageOutlined,
MailIcon: MailOutlined,
BellIcon: BellOutlined,
BarChartIcon: BarChartOutlined,
SettingsIcon: SettingOutlined,
InboxIcon: InboxOutlined,
};
export function resolveIcon(name: string | undefined): unknown | undefined {
if (!name) return undefined;
return ICONS[name];
}