📁 Showcase
Office Master

Office master

Feature

Allow Owner to manage offices.

💡
Feature → Backend + Frontend

Backend

1. OfficeMaster

Create an OfficeMaster spreadsheet to store office-related data.

// fields ending with "*" suffix are required
ensure spreadsheet: OfficeMaster
withFields: [
    "Date*",
    "Name*",
    "OfficeNumber*",
    "MobileNumber*",
    "Active",
    "Address",
    "TeaPrice",
    "CoffeePrice"
  ]
ofTypes: [date, text, text, mobileNumber, bool, paragraph, number, number]
readRoleSet: [Owner]
insertRoleSet: [Owner]
updateRoleSet: [Owner]
removeRoleSet: [Owner]

// make some fields queryable and searchable for faster access
ensure spreadsheet OfficeMaster
  searchables: [Name, OfficeNumber, MobileNumber, Address]
  queryables: [Date, Name, Active, MobileNumber]

// switch context to EntityOffice
ensure form EntityOffice
  label: "Office"
  chatLabelField: OfficeNumber

// switch context to Details
ensure composite Details

// modify generated fields
ensure field Date defaultValue: "now"
ensure field MobileNumber defaultValue: "+919898989898"
ensure field Address defaultValue: "1 Infinite loop, Cupertino, California."
ensure field TeaPrice min: 0 prefix: "₹ "
ensure field CoffeePrice min: 0 prefix: "₹ "

Frontend

1. Actions

a. AddOffice

Implement an AddOffice action to add a new office to the OfficeMaster spreadsheet.

ensure action AddOffice kind: rowInsert
  spreadsheet: OfficeMaster
  icon: "PersonAddAlt1Rounded"
  defaultValueMap: {
    'TeaPrice': {'value': 10},
    'Active': {'value': true},
    'CoffeePrice': {'value': 15}
  }
  sendMessageToInbox: true

b. EditOfficeMaster

Implement an EditOfficeMaster action to modify existing office details in the OfficeMaster spreadsheet.

// switch context to OfficeMaster
ensure spreadsheet OfficeMaster

// Attach List layout and Table layout to OfficeMaster
// to specify how the spreadsheet is displayed

//************
// List layout
//************

// Within list layout each list item is displayed as follows,
//
// FirstLine  => Name                           Date
// SecondLine => MobileNumber           OfficeNumber
// ThirdLine  => TeaPrice, CoffeePrice

ensure layoutSpreadsheet ListLayout kind: list
  filter.showSearchBar: true
  firstLine.first.lineFields: [Name]
  firstLine.caption.lineFields: [Date]
  secondLine.first.lineFields: [MobileNumber]
  secondLine.caption.lineFields: [OfficeNumber]
  thirdLine.first.lineFields: [TeaPrice, CoffeePrice]

//*************
// Table layout
//*************

ensure layoutSpreadsheet TableLayout kind: table
  showComps: [
    Date,
    Name,
    OfficeNumber,
    MobileNumber,
    Active,
    Address,
    TeaPrice,
    CoffeePrice
  ]
  columnSizeSet: ["AutoSize"]

//******************************
// Action to expose OfficeMaster
//******************************

// this action update the existing office or add a new office
ensure action EditOfficeMaster kind: spreadsheetEditor
  spreadsheet: OfficeMaster
  icon: "EditNoteRounded"
  defaultValueMap: {
    'TeaPrice': {
      'value': 10
    },
    'Active': {
      'value': true
    },
    'CoffeePrice': {
      'value': 15
    }
  }
  layoutSpreadsheet: TableLayout
  bulkInsertRoleSet: [Owner]

2. Group actions

Group these actions under a section named “OfficeMaster” for easy access.

ensure group OfficeMaster
  allowPromptAssistant: false
  hideActionMenu: true
  pinnedActions: [AddOffice, EditOfficeMaster]
    actionPermission: {
      'AddOffice': {
        'roles': ['Owner']
      },
      'EditOfficeMaster': {
        'roles': ['Owner']
      }
  }