G Gaia

Switch factory

CYTO-11 — Balakong Jaya CTSB CYTO-29 CTSB CYTOWELL-54 — Taming Jaya PIC/S CTWSB CYTOCNGZ-602 — Guangzhou CTCNGZ

Only factories you are granted appear here (Filament tenant menu).

Leo Lim

leo@navi.my · Owner / Admin

Profile settings Change password

Theme

Sign out
RetailSellR&DMakeBuyStockPlanItemsGMPAdminInsights

Suppliers

Name E-mail address Currency Phone number Comment
Showing 1–24 of 85 (sample rows from Katana snapshot)

Project Gaia — static mockup in Filament v3 table idiom. No backend. Sample data: Katana tenant snapshot 2026-07-07.

Suppliers — field manifest

FieldFilament componentTypeSourceFK target
(checkbox)Table selection + DeleteBulkActionselection— (bulk delete of selected suppliers)
NameTextColumn::searchable(isIndividual)->url()->sortable()string NOT NULLstored: suppliers.name — the only required field on the card (form label "Company name" vs table label "Name"); names carry "(Supplier)" suffixes to disambiguate from same-company customer contacts
E-mail addressTextColumn::searchable(isIndividual)string, nullablestored: suppliers.email (empty across this dataset)
CurrencyTextColumn + SelectFilter; Select on the cardISO currency codestored: suppliers.currency, defaults to account base currency — every row MYR; the card select suffixes the base option as "MYR (Base)"; denominates that supplier's POscurrencies.code
Phone numberTextColumnstring, nullablestored: suppliers.phone (empty across this dataset)
CommentTextColumnstring, nullablestored: suppliers.comment (empty across this dataset). Katana DOM order is Name, E-mail, Phone, Comment, Currency but the rendered order is Name, E-mail, Currency, Phone, Comment — mockup follows the visual order
Additional emailsTagsInput (card only, no table column)string[] (json)stored: suppliers.additional_emails — every address here is cc'd when a PO is emailed to the supplier. NEW: exists nowhere in Gaia today
AddressTextarea (card only, no table column)text, nullablestored: suppliers.address — Katana keeps a single free-text line, not a structured address. NEW: exists nowhere in Gaia today

Engine notes

  • Record count header "85 suppliers" is derived (count of rows after filters) — up from 83 in the previous snapshot round.
  • Katana grid is virtualized — the capture contains only a slice of the 85 rows (ADX Advertising Trading … Nexus TAC Sdn Bhd); cells render lazily on scroll. Filament uses ordinary pagination instead.
  • Supplier card (slide-over) carries seven fields: Company name (required), Email, Additional emails, Phone number, Address, Currency, Comment — Gaia uses the Filament explicit Save/Cancel idiom in place of Katana's autosave "Not saved" chip; Delete is a header action.
  • "+ New supplier" is a split button: primary CreateAction plus "Import suppliers (CSV)" (ImportAction) — the capture proves the import flow is used in production ("Import done." toast).
  • Currency is uniformly MYR, consistent with a per-supplier default currency inherited from the account base currency; it would denominate that supplier's purchase orders.
  • Supplier names carry disambiguation suffixes like "(Supplier)" — the same company can also exist as a customer contact, so supplier and customer are separate contact tables.
  • Suppliers support CSV import ("Import done." toast present in the capture).
  • No status/lifecycle field on suppliers, no totals/footer row, no monetary aggregation on this screen.
  • Every column gets an inline filter in Katana; the mockup keeps individual search on Name and E-mail only (Filament searchable(isIndividual: true)).

Supplier

Not saved

Stored as suppliers.name (NOT NULL) — the only required field; the table shows it as "Name".

TagsInput — every address here is cc'd when a purchase order is emailed to the supplier.

Single free-text line in Katana — kept as one Textarea, not a structured address.