Skip to content

Releases: lowdefy/modules-mongodb

v0.22.0

Choose a tag to compare

@github-actions github-actions released this 30 Jul 10:38
48a5bd0
  • @lowdefy/modules-mongodb-plugins: ### Minor Changes

  • #138 254289d Thanks @Saiby100! - Five selectors in the form-components library — selector, multiple_selector, button_selector, radio_selector, checkbox_selector — now take an enum var as an alternative to options. An enum map (slug → { title, color, icon }) is converted to options for you: the title becomes the label, the slug is the stored value, the colour tints the selected value and the icon shows on a multiple_selector tag. options wins when both are set, and an operator-valued enum (_global: enums.x, _module.var: y) still resolves. tree_multiple_selector stays options-only: a flat enum map cannot express the primaryKey/parentKey hierarchy it exists for, and for flat choices multiple_selector renders enum colours and icons that the tree drops.

    On read-only surfaces, an enum-driven selector now shows the entry's title. The DataDescriptions block reads the field's enum map off the form config and renders the matching entry's title, colour and icon instead of formatting the stored slug — so a status of in-progress with title "In progress" no longer displays as "In Progress". Overview action cards carry the enum map through, so they resolve too. Nothing else changes: an options-driven selector, an unknown value, and a field with no enum all keep their existing display.

    Breaking: the enum_selector component is removed — it was a Selector-only special case of what selector + enum now does. Replace component: enum_selector with component: selector and keep the same enum: map. Two behaviour differences to expect: the label is no longer hardcoded to align: right / span: 12 (declare label_inline / label_span if you relied on it), and the enum's colour now actually tints the selected value, which the old component's option shape never did.

Patch Changes

  • #138 b8f7213 Thanks @Saiby100! - A checkbox_selector field now uses the selector renderer on read-only surfaces, like every other selector. It was the one options-taking selector missing from the DataDescriptions component hints, so its stored slugs fell through to the generic string renderer. That path already rendered them as tags, so the visible fix is enum resolution: an enum-backed checkbox list showed "Weekly" (the slug, title-cased) instead of the entry's title "Weekly review", and dropped the entry's colour and icon.

  • @lowdefy/modules-mongodb-workflows: ### Minor Changes

  • #138 254289d Thanks @Saiby100! - Five selectors in the form-components library — selector, multiple_selector, button_selector, radio_selector, checkbox_selector — now take an enum var as an alternative to options. An enum map (slug → { title, color, icon }) is converted to options for you: the title becomes the label, the slug is the stored value, the colour tints the selected value and the icon shows on a multiple_selector tag. options wins when both are set, and an operator-valued enum (_global: enums.x, _module.var: y) still resolves. tree_multiple_selector stays options-only: a flat enum map cannot express the primaryKey/parentKey hierarchy it exists for, and for flat choices multiple_selector renders enum colours and icons that the tree drops.

    On read-only surfaces, an enum-driven selector now shows the entry's title. The DataDescriptions block reads the field's enum map off the form config and renders the matching entry's title, colour and icon instead of formatting the stored slug — so a status of in-progress with title "In progress" no longer displays as "In Progress". Overview action cards carry the enum map through, so they resolve too. Nothing else changes: an options-driven selector, an unknown value, and a field with no enum all keep their existing display.

    Breaking: the enum_selector component is removed — it was a Selector-only special case of what selector + enum now does. Replace component: enum_selector with component: selector and keep the same enum: map. Two behaviour differences to expect: the label is no longer hardcoded to align: right / span: 12 (declare label_inline / label_span if you relied on it), and the enum's colour now actually tints the selected value, which the old component's option shape never did.

v0.21.0

Choose a tag to compare

@github-actions github-actions released this 29 Jul 10:42
8cccb30
  • @lowdefy/modules-mongodb-plugins: ### Minor Changes

  • #133 66d0e4a Thanks @Saiby100! - Honour show_comment on kind: check actions. The flag chooses whether an action's working surface offers the optional free-text comment box — it has worked on form actions since it shipped, but check actions silently ignored it and always rendered the box. Declaring show_comment: false on a check action now removes it, on both the standalone check page and the in-context check modal.

    Each check action's declaration is honoured independently even though one {workflow_type}-action page serves them all. The flag is resolved from workflow config on every read (like description and universal_fields), so it is never stored on the action document — change it and redeploy, and in-flight actions pick it up with nothing to migrate.

    Only the optional comment is gated. The two mandatory comment inputs always render, because the engine needs their text: the reviewer's brief in the review-mode Request Changes modal, and the recovery note on an action sitting in the error stage. This matches what form actions already did.

    show_comment is now validated: a non-boolean value fails the build instead of being silently accepted. If an app authored a quoted show_comment: "false", that build will now error — the quoted string was never honoured as false, so update it to a real boolean. The field is also now documented in the authoring grammar reference, where it was previously missing entirely.

  • @lowdefy/modules-mongodb-workflows: ### Minor Changes

  • #133 66d0e4a Thanks @Saiby100! - Honour show_comment on kind: check actions. The flag chooses whether an action's working surface offers the optional free-text comment box — it has worked on form actions since it shipped, but check actions silently ignored it and always rendered the box. Declaring show_comment: false on a check action now removes it, on both the standalone check page and the in-context check modal.

    Each check action's declaration is honoured independently even though one {workflow_type}-action page serves them all. The flag is resolved from workflow config on every read (like description and universal_fields), so it is never stored on the action document — change it and redeploy, and in-flight actions pick it up with nothing to migrate.

    Only the optional comment is gated. The two mandatory comment inputs always render, because the engine needs their text: the reviewer's brief in the review-mode Request Changes modal, and the recovery note on an action sitting in the error stage. This matches what form actions already did.

    show_comment is now validated: a non-boolean value fails the build instead of being silently accepted. If an app authored a quoted show_comment: "false", that build will now error — the quoted string was never honoured as false, so update it to a real boolean. The field is also now documented in the authoring grammar reference, where it was previously missing entirely.

  • #133 98059af Thanks @Saiby100! - The checkbox_selector form component takes label_inline and label_span vars, like the other field components. Previously its label was hardcoded to span: 12 / align: right, so a checkbox group could not sit inline with its siblings or use a different label width.

    This changes the default rendering: with neither var set, the label no longer gets span: 12 / align: right, matching yes_no_selector and the rest of the library. An action that relied on the old look should declare label_inline: true and label_span: 12 explicitly. colon: false is still hardcoded.

  • #133 7cc8b51 Thanks @Saiby100! - checkbox_selector now validates required: true the way multiple_selector does. Its value is an array, and Lowdefy's built-in required treats an empty array as present — so a required checkbox group would let submit through with nothing ticked. It now appends the same required-non-empty rule the other array-valued fields use (_array.length > 0, message "This field is required.").

    The component also gains a validate var, which it was missing entirely. Caller-supplied rules are concatenated ahead of the generated required rule, matching multiple_selector, tree_multiple_selector, controlled_list, date_range_selector, and file_upload.

  • #133 1da82a6 Thanks @Saiby100! - Raw blocks in an action form: now use key, not id — which is what makes their submitted values round-trip.

    A raw inline Lowdefy block (a form: entry with no component:) was documented as carrying its real id, on the reasoning that the id doubles as the state path just like a library component's key. That is true of the block tree, but it misses the second consumer of the authored form: array: the form_meta projection records only component/key/required/title/validate, and GetWorkflowAction allowlists the stored form_data slice by those keys. An entry with a bare id and no key has no form_meta entry, so its value saved but was never read back — blank on re-edit, and absent from the overview and review views.

    Raw entries now share the library's authoring vocabulary: key becomes the block id (and the form_meta key), and title is the overview/review display label. Both are stripped before the node reaches the page tree, since neither is a valid Lowdefy block property. Writing key and id on the same entry is now an error, as is a non-string key.

    This also makes consumer-supplied field components work. An app that needs a field the library doesn't cover, reused across several of its own actions, can now own a component file that emits a form entry and _ref it from the app-side workflow config — the ref resolves in app context, so it is not subject to the constraint that a module ref cannot escape its package root. Those components get full parity with the built-in library: state binding, value round-trip, overview rendering, id-collision checking, and viewOnly.

    Existing raw blocks authored with id keep building and rendering exactly as before — they were already not round-tripping, so nothing regresses. Switch them to key to fix prefill and display. The keyid mapping applies at form: entry positions only (top-level entries, and the form: of a structural component); inside a raw block's own blocks: array, keep using id.

v0.20.0

Choose a tag to compare

@github-actions github-actions released this 28 Jul 10:47
80ceb9e
  • @lowdefy/modules-mongodb-workflows: ### Minor Changes

  • #131 8b25037 Thanks @Yianni99! - The checkbox_selector form component takes a direction var (horizontal — the existing behaviour — or vertical). Setting it to vertical stacks the checkboxes one per line instead of flowing them across the row, which reads better once an action's option list is long enough that a wrapped row is hard to scan.

  • #131 41fef2d Thanks @Yianni99! - Workflow and action-group overview pages: each action card now reads at a glance. The card header is tinted with its status colour and the status badge picks up the same pale-fill/outline/saturated-text treatment as the workflow status pill above it, so a long list of collapsed actions can be scanned without opening anything. The action message is emphasised, the link button carries a right-arrow, and a collapsed card is now just its coloured header instead of a header plus an empty white body.

    Uploaded files inside an action's data now download instead of showing "No files available" — both pages wire the files module's download policy.

    The title bar now states which record the workflow belongs to: a new line beneath the title shows the entity's id, linked straight to its record. Expand/collapse-all has moved into the title bar's actions area, freeing the row it used to occupy above the cards, and reads as a button rather than plain text. The group heading's icon is also aligned with its title rather than sitting above it.

v0.19.0

Choose a tag to compare

@github-actions github-actions released this 28 Jul 09:34
ca3f90a
  • @lowdefy/modules-mongodb-plugins: ### Minor Changes

  • #129 339a42b Thanks @Saiby100! - Honour universal_fields on kind: check actions. The flag chooses which of the two action-level fields (assignees, due_date) an action's UI shows — it has worked on form actions since it shipped, but check actions silently ignored it and always rendered both. Declaring universal_fields: [due_date] on a check action now hides the assignees chip and drops the assignees input from the ✎ edit modal, on both the standalone check page and the in-context check modal.

    Each check action's declaration is honoured independently even though one {workflow_type}-action page serves them all. The presence list is resolved from workflow config on every read (like description), so it is never stored on the action document — change it and redeploy, and in-flight actions pick it up with nothing to migrate.

    This is presence, not permission: hiding a field does not gate who may change it (use access: for that), and a hidden field is never written or cleared, so narrowing the list on an action that already has assignees stops showing them rather than wiping them. universal_fields is now documented in the authoring grammar reference, where it was previously missing entirely.

  • @lowdefy/modules-mongodb-workflows: ### Minor Changes

  • #129 339a42b Thanks @Saiby100! - Honour universal_fields on kind: check actions. The flag chooses which of the two action-level fields (assignees, due_date) an action's UI shows — it has worked on form actions since it shipped, but check actions silently ignored it and always rendered both. Declaring universal_fields: [due_date] on a check action now hides the assignees chip and drops the assignees input from the ✎ edit modal, on both the standalone check page and the in-context check modal.

    Each check action's declaration is honoured independently even though one {workflow_type}-action page serves them all. The presence list is resolved from workflow config on every read (like description), so it is never stored on the action document — change it and redeploy, and in-flight actions pick it up with nothing to migrate.

    This is presence, not permission: hiding a field does not gate who may change it (use access: for that), and a hidden field is never written or cleared, so narrowing the list on an action that already has assignees stops showing them rather than wiping them. universal_fields is now documented in the authoring grammar reference, where it was previously missing entirely.

v0.18.0

Choose a tag to compare

@github-actions github-actions released this 27 Jul 09:23
8a82b3c
  • @lowdefy/modules-mongodb-plugins: ### Patch Changes

  • #126 87c465c Thanks @Yianni99! - Removed the redundant status-colored dot from workflow actions: the leading bullet on each action in the WorkflowProgress panel, and the dot beside the status text on action events in the EventsTimeline card. The status colour is already carried by the surrounding button/text, so the dot added visual noise. Timeline node markers, group icons, and the standard ActionSteps step list are unchanged.

  • @lowdefy/modules-mongodb-workflows: ### Minor Changes

  • #123 fb72ec0 Thanks @Yianni99! - Action-form text fields (text_input) support native max-length capping. A new max_length field option maps to the TextInput maxLength property, stopping input at the limit instead of erroring after over-long input; show_count maps to showCount for a live "n/max" counter and defaults to on whenever max_length is set.

  • #126 79824a6 Thanks @Yianni99! - Workflow action pages support an optional wide layout. Setting page_layout: wide on a workflow renders all of its action pages — view, edit, review, error, and the per-workflow check page — with the workflow-progress panel on the left, the form expanded to the full width, and the record's Details and History moved into a right-side drawer opened from a header button. Workflows that omit page_layout (or set it to standard) keep the existing three-column layout unchanged, and an unrecognized value is rejected at build time.

  • #123 fb72ec0 Thanks @Yianni99! - Workflow and action-group overview pages: the back arrow now returns to the previous page instead of always jumping to the entity view (the entity stays reachable via the breadcrumb), and each action is individually collapsible with an Expand/Collapse-all toggle, all collapsed by default.

    Adds two per-action options: show_comment (default true) — set false to hide the free-form comment box on an action's edit and review pages; and pages.edit.validate_on_draft (default false) — set true to validate the form (like Submit) before the edit page's Save Draft saves.

v0.17.0

Choose a tag to compare

@github-actions github-actions released this 23 Jul 14:42
0dec636
  • @lowdefy/modules-mongodb-deals: ### Minor Changes

  • #120 5d94b31 Thanks @Yianni99! - Deals view surfaces are now host-controllable:

    • Add a show_details var (default true). Set it false to hide the read-only "Details" SmartDescriptions section — for hosts that render their domain fields through custom tiles (components.info_grid_slots) instead of the generic section.
    • Company is no longer a fixed row in the meta strip. Hosts that want it there add a meta_fields entry (the same way Value is added), so a host with a dedicated company tile isn't stuck with a duplicated name.
    • Info-grid layout regrouped: the read-only Details section is now full-width at the top (with a trailing divider that hides along with it), followed by a uniform tile grid — People, Files, then the host info_grid_slots tiles. Previously People sat alone above a divider, apart from the tiles.

v0.16.0

Choose a tag to compare

@github-actions github-actions released this 23 Jul 13:30
6bd6ef5
  • @lowdefy/modules-mongodb-plugins: ### Minor Changes

  • #118 cdd1772 Thanks @Saiby100! - Add a checkable-tree multi-select field for workflow action forms. Report types (or any grouping) show as parent nodes and their items as checkable leaves; checking a group selects all its items. The selection now also renders on the read-only view page instead of showing nothing.

  • @lowdefy/modules-mongodb-workflows: ### Minor Changes

  • #118 cdd1772 Thanks @Saiby100! - Add a checkable-tree multi-select field for workflow action forms. Report types (or any grouping) show as parent nodes and their items as checkable leaves; checking a group selects all its items. The selection now also renders on the read-only view page instead of showing nothing.

v0.15.0

Choose a tag to compare

@github-actions github-actions released this 23 Jul 11:27
4f538a0
  • @lowdefy/modules-mongodb-activities: ### Minor Changes

  • #111 8923ca1 Thanks @Yianni99! - Add the open-tasks component — a compact card list of an entity's open
    kind: task docs, reading activities' own actions collection filtered by
    entity_type/entity_id (the shape create-task/update-task write) and
    an open status (current stage not done). It's the activities-owned
    sibling of the workflows module's open-actions card, styled to match
    it so a host can compose both side by side into one "what's open" row.
    Takes entity_type + entity_id vars and an optional on_click action
    list for wiring a host's task-modal instance. Reads no workflow-engine
    data.

  • #111 8923ca1 Thanks @Yianni99! - Add exported task CRUD — create-task / update-task APIs writing
    kind: task docs into activities' actions-collection, and a paired
    task-modal component. Two seams keep this from being a lossy
    generalization of deals' original deal-only implementation: an arbitrary
    entity link (payload entity_type/entity_id, not a hardcoded reference,
    so a task can hang off a deal, a meeting, or any entity) and a
    consumer-supplied emitted event (task-modal's events var supplies the
    type + Nunjucks display template per create/complete/reopen transition,
    forwarded through to the events module's new-event). task-modal also
    takes the assignee-options source as a var (assignee_options +
    optional assignee_search) instead of hardcoding a request.

  • @lowdefy/modules-mongodb-deals: ### Minor Changes

  • #111 1ed7317 Thanks @Yianni99! - Add the deals module: a workflow-driven deal/opportunity workspace (list,
    create, and a master-detail workspace) that orchestrates the workflows, events,
    activities, files, companies, and contacts modules. The pipeline is a workflows
    workflow selected via the workflow_type var; the deals collection is
    host-app-owned and mapped in. Ships pages all/new/view, a create/update/
    task/outcome API surface, a deal-status-chip component, and app-configurable
    stages/outcomes/reasons/filters/card-fields plus main/info-grid/sidebar/card slots.

  • #111 ab684ab Thanks @Yianni99! - Align the deals module with the sibling entity modules (companies / contacts /
    activities) for consistency: add label / label_plural vars so a host can
    relabel the entity (used across the menu, page titles, breadcrumbs, and the
    New button); extract the create-form body to a form_deal component and the
    list action to a button_new_deal component; adopt the content_width page
    var, vertical field labels, and the shared Cancel/Create button conventions on
    the create page; align the list "New" and filter "Clear" buttons; and
    genericize leftover "sales-pipeline" wording now that the module is
    workflow-agnostic.

  • #111 c772d6f Thanks @Yianni99! - Add an entity_connection_id var (default deals) replacing the hardcoded
    deals literal everywhere the module matches or passes a workflow doc's
    entity.connection_id — the list/detail aggregations (get_selected_deal,
    get_active_deals, get_deals_list, get_selected_deal_open_actions), the outcome
    modal's get-entity-workflows refetch, the deal view and compact list-item
    get-entity-workflows payloads, and the entity_connection_id passed to the
    embedded actions-on-entity component. Lets a host map its deals collection
    under any connection id, as long as it matches the workflow config's
    entity.connection_id.

  • #111 b9b47bc Thanks @Yianni99! - Generalize the deals create/display surface: the module no longer bakes in
    domain-specific fields (material/SKU, product, sector, sub-sector,
    customer-type, project-type, packaging) or their taxonomy vars. Hosts now
    inject their own domain fields through a single fields var — rendered as
    inputs on the create form and read-only on the deal view via
    SmartDescriptions, matching how companies.fields.attributes works. The
    create-deal API writes a generic attributes passthrough, and product
    (previously a top-level field with its own products var and list/header
    rendering) becomes a plain attributes.product host field.

    Breaking (config): consumers must move their domain fields to the new
    fields var and drop the removed products/product_hierarchy/sectors/
    sub_sectors/customer_types vars. Existing deals keep their stored
    attributes.* — the generic passthrough and read side render whatever is
    there. form.name no longer auto-prefills (the shared company-selector has
    no onChange hook); hosts own any prefill via a fields block onChange.

  • #111 c772d6f Thanks @Yianni99! - Stop computing deal_value/close_date from host-specific workflow action
    fields in the list/detail aggregations (get_selected_deal, get_active_deals,
    get_deals_list) — read them as plain stored fields ($value/$close_date,
    each with an $ifNull fallback) the same way deal.outcome is already
    read back after being stamped on write. Also drops the module's inline
    volumes rounding/projection; the module ships no volumes tile of its own —
    hosts supply one through the existing components.info_grid_slots var. An
    unstamped deal now renders 0/ for value/close date instead of an
    app-specific computed number.

Patch Changes

  • #111 8923ca1 Thanks @Yianni99! - Close two reuse gaps in the deal view left over from adopting workflows'
    actions-on-entity: it never dropped the shared check-action-modal, so a
    check-kind action clicked in the phase view full-page-navigated to its own
    action page instead of opening in place; and the deal-outcome modal
    hand-rolled its own get-entity-workflows refetch + entity_workflows
    reseed after submitting the win/loss outcome action, instead of the exported
    entity-workflows-refetch sequence.

    The deal view (pages/view.yaml) now drops check-action-modal next to
    actions-on-entity, with an on_complete that runs entity-workflows-refetch
    plus a re-seed of the open-tasks card (mirroring the existing deal-switch and
    task-save refreshes) so both cards and the stepper stay live after a check
    action completes. components/detail/deal_outcome_modal.yaml now calls
    entity-workflows-refetch instead of its own copy of the same two actions.

  • #111 8923ca1 Thanks @Yianni99! - Replace the single merged open-items card (components/detail/section_actions.yaml

    • components/detail/action_card.yaml.njk) with the two cards it used to
      combine, now composed side by side: the workflows module's open-actions
      and the activities module's new open-tasks. Deletes the merged card,
      its now-dead open_actions_all/open_actions seeding (actions/compute_open_actions.yaml
      and all its call sites), the get_selected_deal_open_actions request, and
      deals' own actions-collection connection (its only remaining reader) —
      the workflows engine keeps its own, separate actions collection. Task
      creation/edit now refetches open-tasks' own request instead.
  • #111 8923ca1 Thanks @Yianni99! - Stop shipping a second, deal-only task implementation — delete
    components/detail/task_modal.yaml, api/create-task.yaml, and
    api/update-task.yaml, and consume activities' new exported task-modal
    component (with activities' create-task/update-task APIs underneath)
    instead. The deal view passes entity_type: deal, the deal id, and its
    deal-task-created/deal-task-completed/deal-task-reopened event
    config, so task creation still writes to the same actions collection,
    links to the deal, and emits the same event display markup as before.
    get_task_assignee_options stays in deals and is now passed to the shared
    modal as its assignee-options source.

  • #111 8923ca1 Thanks @Yianni99! - Stop shipping a second, deal-only note-capture modal — delete
    components/detail/add_note_modal.yaml and consume events' new expo...

Read more

v0.14.1

Choose a tag to compare

@github-actions github-actions released this 22 Jul 13:22
5433414
  • @lowdefy/modules-mongodb-plugins: ### Patch Changes

  • #115 c75bad2 Thanks @Yianni99! - Align the suite to lowdefy 5.5.1 and migrate block stylesheets to CSS Modules.

    Blocks that shipped a global style.cssActionSteps, DataDescriptions,
    EventsTimeline, SmartDescriptions, WorkflowProgress — now import a
    style.module.css whose selectors are wrapped in :global(...) inside
    @layer components, matching the convention used by the official
    @lowdefy/blocks-antd blocks. The Turbopack build in lowdefy 5.5.1 rejects
    global-CSS imports from transpiled first-party packages; the rendered class
    names are unchanged, so consumers see no visual difference.

v0.14.0

Choose a tag to compare

@github-actions github-actions released this 22 Jul 10:51
4c178ec
  • @lowdefy/modules-mongodb-plugins: ### Minor Changes

  • #114 f8b6d19 Thanks @Saiby100! - Add the WorkflowProgress block and the workflows module's workflow-progress component — a presentation variant of actions-on-entity that renders an entity's workflows as collapsible sections of grouped, status-colored action buttons, with progress rings, done-fractions, and the shared check-action click handling baked in.

  • @lowdefy/modules-mongodb-companies: ### Minor Changes

  • #108 784e63c Thanks @Yianni99! - Add optional component vars for consumers that need required/empty-state control:

    • company-selector gains a required var (default false) — sets the block
      required so a page-level Validate flags an empty company selection, instead
      of the consumer hand-rolling a submit guard.
    • file-list gains an empty_text var (default "No files") — overrides the
      empty-state message.
  • @lowdefy/modules-mongodb-files: ### Minor Changes

  • #108 784e63c Thanks @Yianni99! - Add optional component vars for consumers that need required/empty-state control:

    • company-selector gains a required var (default false) — sets the block
      required so a page-level Validate flags an empty company selection, instead
      of the consumer hand-rolling a submit guard.
    • file-list gains an empty_text var (default "No files") — overrides the
      empty-state message.
  • @lowdefy/modules-mongodb-workflows: ### Minor Changes

  • #114 f8b6d19 Thanks @Saiby100! - Add the WorkflowProgress block and the workflows module's workflow-progress component — a presentation variant of actions-on-entity that renders an entity's workflows as collapsible sections of grouped, status-colored action buttons, with progress rings, done-fractions, and the shared check-action click handling baked in.