From e1a9762d21c14a3994b46f5463dfc1fd23c0a7a8 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 8 Apr 2024 09:33:02 +0100 Subject: [PATCH 01/29] Always allow selecting rows in grids in apps, and add binding for grid selected rows --- packages/client/manifest.json | 20 ++++++++--- .../src/components/app/GridBlock.svelte | 34 ++++++++++++++++--- packages/client/src/utils/buttonActions.js | 1 + .../components/grid/cells/GutterCell.svelte | 20 ++++------- .../src/components/grid/layout/Grid.svelte | 2 ++ 5 files changed, 56 insertions(+), 21 deletions(-) diff --git a/packages/client/manifest.json b/packages/client/manifest.json index 08d614391b..ec2f8f1597 100644 --- a/packages/client/manifest.json +++ b/packages/client/manifest.json @@ -6739,10 +6739,22 @@ ] } ], - "context": { - "type": "schema", - "scope": "local" - }, + "context": [ + { + "type": "schema", + "scope": "local" + }, + { + "type": "static", + "values": [ + { + "label": "Selected rows", + "key": "selectedRows", + "type": "array" + } + ] + } + ], "actions": ["RefreshDatasource"] }, "bbreferencefield": { diff --git a/packages/client/src/components/app/GridBlock.svelte b/packages/client/src/components/app/GridBlock.svelte index 46a507387d..52a8e963c7 100644 --- a/packages/client/src/components/app/GridBlock.svelte +++ b/packages/client/src/components/app/GridBlock.svelte @@ -1,8 +1,8 @@
- + { let selection = rowSelectionStore.actions.getSelection( action.parameters.tableComponentId ) + console.log(selection) if (selection.selectedRows && selection.selectedRows.length > 0) { try { const data = await API.exportRows({ diff --git a/packages/frontend-core/src/components/grid/cells/GutterCell.svelte b/packages/frontend-core/src/components/grid/cells/GutterCell.svelte index 377405786d..60b41a2b87 100644 --- a/packages/frontend-core/src/components/grid/cells/GutterCell.svelte +++ b/packages/frontend-core/src/components/grid/cells/GutterCell.svelte @@ -16,6 +16,8 @@ const { config, dispatch, selectedRows } = getContext("grid") const svelteDispatch = createEventDispatcher() + $: selectionEnabled = $config.canSelectRows || $config.canDeleteRows + const select = e => { e.stopPropagation() svelteDispatch("select") @@ -52,7 +54,7 @@
@@ -60,7 +62,7 @@ {#if !disableNumber}
{row.__idx + 1} @@ -117,19 +119,11 @@ .expand { margin-right: 4px; } - .expand { + .expand:not(.visible), + .expand:not(.visible) :global(*) { opacity: 0; + pointer-events: none !important; } - .expand :global(.spectrum-Icon) { - pointer-events: none; - } - .expand.visible { - opacity: 1; - } - .expand.visible :global(.spectrum-Icon) { - pointer-events: all; - } - .delete:hover { cursor: pointer; } diff --git a/packages/frontend-core/src/components/grid/layout/Grid.svelte b/packages/frontend-core/src/components/grid/layout/Grid.svelte index 1d2220951c..bee86a21c8 100644 --- a/packages/frontend-core/src/components/grid/layout/Grid.svelte +++ b/packages/frontend-core/src/components/grid/layout/Grid.svelte @@ -38,6 +38,7 @@ export let canDeleteRows = true export let canEditColumns = true export let canSaveSchema = true + export let canSelectRows = false export let stripeRows = false export let collaboration = true export let showAvatars = true @@ -90,6 +91,7 @@ canDeleteRows, canEditColumns, canSaveSchema, + canSelectRows, stripeRows, collaboration, showAvatars, From 53bbaac7511fbded877ceecc912ede74d7d015a9 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 8 Apr 2024 16:17:22 +0100 Subject: [PATCH 02/29] Update export data action to work with new table component --- .../actions/ExportData.svelte | 32 +++++++---- .../src/components/app/GridBlock.svelte | 27 +++++---- packages/client/src/stores/rowSelection.js | 2 +- packages/client/src/utils/buttonActions.js | 56 ++++++++++++------- .../src/components/grid/stores/ui.js | 6 +- 5 files changed, 74 insertions(+), 49 deletions(-) diff --git a/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/ExportData.svelte b/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/ExportData.svelte index 096341783d..6ed0135844 100644 --- a/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/ExportData.svelte +++ b/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/ExportData.svelte @@ -49,26 +49,34 @@ }, ] - $: tables = findAllMatchingComponents($selectedScreen?.props, component => - component._component.endsWith("table") - ) - $: tableBlocks = findAllMatchingComponents( + $: components = findAllMatchingComponents( $selectedScreen?.props, - component => component._component.endsWith("tableblock") + component => { + const type = component._component + return ( + type.endsWith("/table") || + type.endsWith("/tableblock") || + type.endsWith("/gridblock") + ) + } ) - $: components = tables.concat(tableBlocks) - $: componentOptions = components.map(table => ({ - label: table._instanceName, - value: table._component.includes("tableblock") - ? `${table._id}-table` - : table._id, - })) + $: componentOptions = components.map(component => { + let value = component._id + if (component._component.endsWith("/tableblock")) { + value = `${component._id}-table` + } + return { + label: component._instanceName, + value, + } + }) $: selectedTableId = parameters.tableComponentId?.includes("-") ? parameters.tableComponentId.split("-")[0] : parameters.tableComponentId $: selectedTable = components.find( component => component._id === selectedTableId ) + $: parameters.rows = `{{ literal [${parameters.tableComponentId}].[selectedRows] }}` onMount(() => { if (!parameters.type) { diff --git a/packages/client/src/components/app/GridBlock.svelte b/packages/client/src/components/app/GridBlock.svelte index 52a8e963c7..e2d901cdb5 100644 --- a/packages/client/src/components/app/GridBlock.svelte +++ b/packages/client/src/components/app/GridBlock.svelte @@ -36,12 +36,10 @@ let grid let gridContext - $: columnWhitelist = parsedColumns - ?.filter(col => col.active) - ?.map(col => col.field) + $: parsedColumns = getParsedColumns(columns) + $: columnWhitelist = parsedColumns.filter(x => x.active).map(x => x.field) $: schemaOverrides = getSchemaOverrides(parsedColumns) $: enrichedButtons = enrichButtons(buttons) - $: parsedColumns = getParsedColumns(columns) $: selectedRows = deriveSelectedRows(gridContext) $: data = { selectedRows: $selectedRows } $: actions = [ @@ -67,12 +65,14 @@ // Parses columns to fix older formats const getParsedColumns = columns => { + if (!columns?.length) { + return [] + } // If the first element has an active key all elements should be in the new format - if (columns?.length && columns[0]?.active !== undefined) { + if (columns[0].active !== undefined) { return columns } - - return columns?.map(column => ({ + return columns.map(column => ({ label: column.displayName || column.name, field: column.name, active: true, @@ -81,7 +81,7 @@ const getSchemaOverrides = columns => { let overrides = {} - columns?.forEach(column => { + columns.forEach(column => { overrides[column.field] = { displayName: column.label, } @@ -115,13 +115,12 @@ return derived( [gridContext.selectedRows, gridContext.rowLookupMap, gridContext.rows], ([$selectedRows, $rowLookupMap, $rows]) => { - const rowIds = Object.entries($selectedRows || {}) + return Object.entries($selectedRows || {}) .filter(([_, selected]) => selected) - .map(([rowId]) => rowId) - return rowIds.map(id => { - const idx = $rowLookupMap[id] - return gridContext.rows.actions.cleanRow($rows[idx]) - }) + .map(([rowId]) => { + const idx = $rowLookupMap[rowId] + return gridContext.rows.actions.cleanRow($rows[idx]) + }) } ) } diff --git a/packages/client/src/stores/rowSelection.js b/packages/client/src/stores/rowSelection.js index 4c0a196678..554c3645f0 100644 --- a/packages/client/src/stores/rowSelection.js +++ b/packages/client/src/stores/rowSelection.js @@ -15,7 +15,7 @@ const createRowSelectionStore = () => { const componentId = Object.keys(selection).find( componentId => componentId === tableComponentId ) - return selection[componentId] || {} + return selection[componentId] } return { diff --git a/packages/client/src/utils/buttonActions.js b/packages/client/src/utils/buttonActions.js index 710fac085d..1532a9c85b 100644 --- a/packages/client/src/utils/buttonActions.js +++ b/packages/client/src/utils/buttonActions.js @@ -332,31 +332,49 @@ const s3UploadHandler = async action => { } const exportDataHandler = async action => { - let selection = rowSelectionStore.actions.getSelection( - action.parameters.tableComponentId - ) - console.log(selection) - if (selection.selectedRows && selection.selectedRows.length > 0) { + let { tableComponentId, rows, type, columns, delimiter, customHeaders } = + action.parameters + + // Handle legacy configs using the row selection store + if (!rows?.length) { + const selection = rowSelectionStore.actions.getSelection(tableComponentId) + if (selection?.rows?.length) { + rows = selection.selectedRows + } + } + + // Get table ID from first row + const tableId = rows?.[0]?.tableId + + // Handle no rows selected + if (!rows?.length) { + notificationStore.actions.error("Please select at least one row") + } + // Handle case where we're not using a DS+ + else if (!tableId) { + notificationStore.actions.error( + "Exporting data only works for tables and views" + ) + } + // Happy path when we have both rows and table ID + else { try { + // Flatten rows if required + if (typeof rows[0] !== "string") { + rows = rows.map(row => row._id) + } const data = await API.exportRows({ - tableId: selection.tableId, - rows: selection.selectedRows, - format: action.parameters.type, - columns: action.parameters.columns?.map( - column => column.name || column - ), - delimiter: action.parameters.delimiter, - customHeaders: action.parameters.customHeaders, + tableId, + rows, + format: type, + columns: columns?.map(column => column.name || column), + delimiter, + customHeaders, }) - download( - new Blob([data], { type: "text/plain" }), - `${selection.tableId}.${action.parameters.type}` - ) + download(new Blob([data], { type: "text/plain" }), `${tableId}.${type}`) } catch (error) { notificationStore.actions.error("There was an error exporting the data") } - } else { - notificationStore.actions.error("Please select at least one row") } } diff --git a/packages/frontend-core/src/components/grid/stores/ui.js b/packages/frontend-core/src/components/grid/stores/ui.js index da0558bb5b..656db3627e 100644 --- a/packages/frontend-core/src/components/grid/stores/ui.js +++ b/packages/frontend-core/src/components/grid/stores/ui.js @@ -113,9 +113,9 @@ export const createActions = context => { // Callback when leaving the grid, deselecting all focussed or selected items const blur = () => { - focusedCellId.set(null) - selectedRows.set({}) - hoveredRowId.set(null) + // focusedCellId.set(null) + // selectedRows.set({}) + // hoveredRowId.set(null) } return { From 8e7e2ddb99895a258ee5278bfed1aa93f8c11d5c Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 8 Apr 2024 16:19:06 +0100 Subject: [PATCH 03/29] Clarify wording --- packages/client/src/utils/buttonActions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/src/utils/buttonActions.js b/packages/client/src/utils/buttonActions.js index 1532a9c85b..2fa68ce424 100644 --- a/packages/client/src/utils/buttonActions.js +++ b/packages/client/src/utils/buttonActions.js @@ -353,7 +353,7 @@ const exportDataHandler = async action => { // Handle case where we're not using a DS+ else if (!tableId) { notificationStore.actions.error( - "Exporting data only works for tables and views" + "You can only export data from table datasources" ) } // Happy path when we have both rows and table ID From cfcda49c8038a3bbbce38666d585dc61c17cf2e0 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 8 Apr 2024 16:39:55 +0100 Subject: [PATCH 04/29] Fix data export for legacy configs --- packages/client/src/utils/buttonActions.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/client/src/utils/buttonActions.js b/packages/client/src/utils/buttonActions.js index 2fa68ce424..c481fa5828 100644 --- a/packages/client/src/utils/buttonActions.js +++ b/packages/client/src/utils/buttonActions.js @@ -331,20 +331,29 @@ const s3UploadHandler = async action => { } } +/** + * For new configs, "rows" is defined and enriched to be the array of rows to + * export. For old configs it will be undefined and we need to use the legacy + * row selection store in combination with the tableComponentId parameter. + */ const exportDataHandler = async action => { let { tableComponentId, rows, type, columns, delimiter, customHeaders } = action.parameters + let tableId // Handle legacy configs using the row selection store if (!rows?.length) { const selection = rowSelectionStore.actions.getSelection(tableComponentId) - if (selection?.rows?.length) { + if (selection?.selectedRows?.length) { rows = selection.selectedRows + tableId = selection.tableId } } - // Get table ID from first row - const tableId = rows?.[0]?.tableId + // Get table ID from first row if needed + if (!tableId) { + tableId = rows?.[0]?.tableId + } // Handle no rows selected if (!rows?.length) { From 1ec9acc855f71d8509af66eb41609e6ebd8ec080 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 8 Apr 2024 16:46:05 +0100 Subject: [PATCH 05/29] Revert unnecessary changes --- .../ButtonActionEditor/actions/ExportData.svelte | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/ExportData.svelte b/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/ExportData.svelte index 6ed0135844..a857bc7ede 100644 --- a/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/ExportData.svelte +++ b/packages/builder/src/components/design/settings/controls/ButtonActionEditor/actions/ExportData.svelte @@ -60,16 +60,12 @@ ) } ) - $: componentOptions = components.map(component => { - let value = component._id - if (component._component.endsWith("/tableblock")) { - value = `${component._id}-table` - } - return { - label: component._instanceName, - value, - } - }) + $: componentOptions = components.map(table => ({ + label: table._instanceName, + value: table._component.endsWith("/tableblock") + ? `${table._id}-table` + : table._id, + })) $: selectedTableId = parameters.tableComponentId?.includes("-") ? parameters.tableComponentId.split("-")[0] : parameters.tableComponentId From 24d6bfcd0a8f0e68152cae4a6d7ee2abbe28119e Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 8 Apr 2024 16:49:37 +0100 Subject: [PATCH 06/29] Restore commented out code --- packages/frontend-core/src/components/grid/stores/ui.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/frontend-core/src/components/grid/stores/ui.js b/packages/frontend-core/src/components/grid/stores/ui.js index 656db3627e..8195abf446 100644 --- a/packages/frontend-core/src/components/grid/stores/ui.js +++ b/packages/frontend-core/src/components/grid/stores/ui.js @@ -109,13 +109,12 @@ export const deriveStores = context => { } export const createActions = context => { - const { focusedCellId, selectedRows, hoveredRowId } = context + const { focusedCellId, hoveredRowId } = context // Callback when leaving the grid, deselecting all focussed or selected items const blur = () => { - // focusedCellId.set(null) - // selectedRows.set({}) - // hoveredRowId.set(null) + focusedCellId.set(null) + hoveredRowId.set(null) } return { From 66381ded2f6aa7cd8667043c409c69d6aa79248d Mon Sep 17 00:00:00 2001 From: theodelaporte Date: Fri, 19 Apr 2024 10:37:51 +0200 Subject: [PATCH 07/29] :memo: Add portuguese version of readme --- i18n/README.por.md | 88 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 i18n/README.por.md diff --git a/i18n/README.por.md b/i18n/README.por.md new file mode 100644 index 0000000000..b23988cac5 --- /dev/null +++ b/i18n/README.por.md @@ -0,0 +1,88 @@ +

+ + Budibase + +

+

+ Budibase +

+ +

+ A plataforma low-code que você vai adorar usar +

+

+ Budibase é uma plataforma low-code open source e é a maneira mais fácil de criar ferramentas internas que aumentam a produtividade. +

+ +

+ 🤖 🎨 🚀 +

+
+ +

+ Budibase design ui +

+ +

+ + Todas as releases do GitHub + + + Release do GitHub (em ordem cronológica) + + + Siga @budibase + + Código de conduta + + + +

+ +

+ Começar + · + Documentação + · + Solicitações de melhoria + · + Reportar um bug + · + Suporte: Discussões +

+ +

+ +## ✨ Funcionalidades + +### Construa e implante um verdadeiro software +Ao contrário de outras plataformas, com Budibase você constrói e implanta aplicativos de página única. Os aplicativos Budibase são altamente performáticos e podem ser designados de forma responsiva, proporcionando assim aos seus usuários uma experiência excepcional. +

+ +### Fonte livre e extensível +Budibase é software livre - sob licença GPL v3. Isso deve lhe dar tranquilidade de que Budibase estará sempre por aqui. Você também pode codificar no Budibase ou bifurcá-lo e fazer alterações como quiser, tornando-o uma experiência amigável para desenvolvedores. +

+ +### Importar dados ou começar do zero +Budibase pode extrair dados de várias fontes, incluindo MongoDB, CouchDB, PostgreSQL, MySQL, Airtable, S3, DynamoDB ou uma API REST. E ao contrário de outras plataformas, com Budibase, você pode começar do zero e criar aplicativos de negócios sem nenhuma fonte de dados. [Solicitar uma nova fonte de dados](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas). + +

+ Dados do Budibase +

+

+ +### Design e criação de aplicativos usando componentes pré-definidos. + +Budibase vem com componentes belamente projetados e poderosos que você pode usar como blocos de construção para construir sua interface do usuário. Também expomos muitas de suas opções de estilo CSS favoritas para que você possa ser mais criativo. [Solicitar um novo componente](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas). + +

+ Design do Budibase +

+

+ +### Automatize processos, integre outras ferramentas e se conecte a webhooks +Economize tempo automatizando processos manuais e fluxos de trabalho. Seja conectando-se a webhooks ou automatizando e-mails, basta dizer ao Budibase o que fazer e deixá-lo trabalhar para você. Você pode facilmente [criar uma nova automação para o Budibase aqui](https://github.com/Budibase/automations) ou [Solicitar uma nova automação](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas). + +

+ Automações do Budibase +

From a56fd679112f051cdd01ea275848ef575c963233 Mon Sep 17 00:00:00 2001 From: theodelaporte Date: Fri, 19 Apr 2024 10:38:52 +0200 Subject: [PATCH 08/29] :memo: add italian version of readme --- i18n/README.it.md | 74 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 i18n/README.it.md diff --git a/i18n/README.it.md b/i18n/README.it.md new file mode 100644 index 0000000000..b9cca5a61d --- /dev/null +++ b/i18n/README.it.md @@ -0,0 +1,74 @@ +

+ + Budibase + +

+

+ Budibase +

+ +

+ La piattaforma low-code che amerai usare +

+

+ Budibase è una piattaforma low-code open source ed è il modo più facile per creare strumenti interni che aumentano la produttività. +

+ +

+ 🤖 🎨 🚀 +

+
+ +

+ Budibase design ui +

+ +

+ + Tutti i download da GitHub + + + Release di GitHub (in ordine cronologico) + + + Segui @budibase + + Codice di condotta + + + +

+ +

+ Iniziare + · + Documentazione + · + Richieste di miglioramento + · + Segnalare un bug + · + Supporto: Discussioni +

+ +

+ +## ✨ Funzionalità + +### Costruisci e distribuisci un vero software +A differenza di altre piattaforme, con Budibase si costruiscono e distribuiscono applicazioni single-page. Le applicazioni Budibase sono altamente performanti e possono essere progettate in modo responsivo, offrendo agli utenti un'esperienza eccezionale. +

+ +### Sorgente libero ed estensibile +Budibase è software libero - sotto licenza GPL v3. Questo dovrebbe darti la tranquillità che Budibase sarà sempre qui. Puoi anche codificare in Budibase o fare un fork e apportare modifiche come desideri, rendendolo un'esperienza amichevole per gli sviluppatori. +

+ +### Importare dati o partire da zero +Budibase può estrarre dati da varie fonti, tra cui MongoDB, CouchDB, PostgreSQL, MySQL, Airtable, S3, DynamoDB o un'API REST. E a differenza di altre piattaforme, con Budibase puoi partire da zero e creare applicazioni di business senza alcuna fonte dati. [Richiedi una nuova fonte di dati](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas). + +

+ Dati di Budibase +

+

+ +### Progettare e creare applicazioni utilizzando component From 7c9c3b719675e1eb6cac64a804b0e71b9ba23e04 Mon Sep 17 00:00:00 2001 From: theodelaporte Date: Fri, 19 Apr 2024 10:39:44 +0200 Subject: [PATCH 09/29] :memo: add russian version of readme --- i18n/README.ru.md | 83 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 i18n/README.ru.md diff --git a/i18n/README.ru.md b/i18n/README.ru.md new file mode 100644 index 0000000000..61e5a00550 --- /dev/null +++ b/i18n/README.ru.md @@ -0,0 +1,83 @@ +

+ + Budibase + +

+

+ Budibase +

+ +

+ Платформа low-code, которую вы будете любить использовать +

+

+ Budibase - это open source платформа low-code, которая является самым простым способом создания внутренних инструментов, повышающих производительность. +

+ +

+ 🤖 🎨 🚀 +

+
+ +

+ Budibase design ui +

+ +

+ + Все скачивания с GitHub + + + Релизы GitHub (в хронологическом порядке) + + + Подписаться на @budibase + + Кодекс поведения + + + +

+ +

+ Начать + · + Документация + · + Запросы на улучшение + · + Сообщить об ошибке + · + Поддержка: Обсуждения +

+ +

+ +## ✨ Функциональности + +### Создание и развертывание настоящего программного обеспечения +В отличие от других платформ, с Budibase вы создаете и развертываете одностраничные приложения. Приложения Budibase обладают высокой производительностью и могут быть разработаны с адаптивным дизайном, обеспечивая пользователям исключительный опыт. +

+ +### Свободный и расширяемый исходный код +Budibase - это свободное программное обеспечение под лицензией GPL v3. Это должно дать вам уверенность в том, что Budibase всегда будет доступен. Вы также можете кодировать в Budibase или создать его форк и вносить изменения по своему усмотрению, что делает его дружественным для разработчиков. +

+ +### Импорт данных или начало с нуля +Budibase может извлекать данные из различных источников, включая MongoDB, CouchDB, PostgreSQL, MySQL, Airtable, S3, DynamoDB или REST API. И в отличие от других платформ, с Budibase вы можете начать с нуля и создавать деловые приложения без каких-либо источников данных. [Запросить новый источник данных](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas). + +

+ Данные Budibase +

+

+ +### Проектирование и создание приложений с помощью предварительно определенных компонентов +Budibase поставляется с красиво спроектированными и мощными компонентами, которые можно использовать как строительные блоки для создания вашего пользовательского интерфейса. Мы также предоставляем множество ваших любимых опций стилей CSS, чтобы вы могли проявить свою творческую мысль. [Запросить новый компонент](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas). + +

+ Дизайн Budibase +

+

+ +### Автоматизация процессов, интеграция с другими инструментами и подключение веб-хуков +Экономьте время, автоматизируя ручные процессы и рабочие пот From 03d3151a65f20b68316fc76a5de1563f199b99d1 Mon Sep 17 00:00:00 2001 From: theodelaporte Date: Fri, 19 Apr 2024 10:41:54 +0200 Subject: [PATCH 10/29] :memo: match readme to each other --- i18n/README.it.md | 169 +++++++++++++++++++++++++++++++++++++++++---- i18n/README.por.md | 161 +++++++++++++++++++++++++++++++++++++----- i18n/README.ru.md | 160 +++++++++++++++++++++++++++++++++++++----- 3 files changed, 438 insertions(+), 52 deletions(-) diff --git a/i18n/README.it.md b/i18n/README.it.md index b9cca5a61d..8972fcdb18 100644 --- a/i18n/README.it.md +++ b/i18n/README.it.md @@ -8,10 +8,10 @@

- La piattaforma low-code che amerai usare + La piattaforma low-code che amerai utilizzare

- Budibase è una piattaforma low-code open source ed è il modo più facile per creare strumenti interni che aumentano la produttività. + Budibase è una piattaforma low-code open source ed è il modo più semplice per creare strumenti interni che migliorano la produttività.

@@ -25,10 +25,10 @@

- Tutti i download da GitHub + GitHub tutte le release - Release di GitHub (in ordine cronologico) + GitHub release (ordine cronologico) Segui @budibase @@ -40,35 +40,174 @@

- Iniziare + Inizia · Documentazione · Richieste di miglioramento · - Segnalare un bug + Segnala un bug · Supporto: Discussioni



- ## ✨ Funzionalità -### Costruisci e distribuisci un vero software -A differenza di altre piattaforme, con Budibase si costruiscono e distribuiscono applicazioni single-page. Le applicazioni Budibase sono altamente performanti e possono essere progettate in modo responsivo, offrendo agli utenti un'esperienza eccezionale. +### Costruisci e distribuisci software reale +A differenza di altre piattaforme, con Budibase puoi costruire e distribuire applicazioni one-page. Le applicazioni Budibase sono altamente performanti e possono essere progettate in modo responsive, offrendo ai tuoi utenti un'esperienza eccezionale.

-### Sorgente libero ed estensibile -Budibase è software libero - sotto licenza GPL v3. Questo dovrebbe darti la tranquillità che Budibase sarà sempre qui. Puoi anche codificare in Budibase o fare un fork e apportare modifiche come desideri, rendendolo un'esperienza amichevole per gli sviluppatori. +### Sorgente aperto ed estensibile +Budibase è software open source - sotto licenza GPL v3. Questo dovrebbe rassicurarti sul fatto che Budibase sarà sempre lì. Puoi anche codificare in Budibase o fare fork e apportare modifiche a tuo piacimento, rendendolo un'esperienza amichevole per gli sviluppatori.

-### Importare dati o partire da zero -Budibase può estrarre dati da varie fonti, tra cui MongoDB, CouchDB, PostgreSQL, MySQL, Airtable, S3, DynamoDB o un'API REST. E a differenza di altre piattaforme, con Budibase puoi partire da zero e creare applicazioni di business senza alcuna fonte dati. [Richiedi una nuova fonte di dati](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas). +### Importa dati o inizia da zero +Budibase può estrarre i suoi dati da diverse fonti, tra cui MongoDB, CouchDB, PostgreSQL, MySQL, Airtable, S3, DynamoDB o un'API REST. E a differenza di altre piattaforme, con Budibase puoi partire da zero e creare applicazioni aziendali senza alcuna fonte di dati. [Richiedi una nuova fonte di dati](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas).

- Dati di Budibase + Dati Budibase



-### Progettare e creare applicazioni utilizzando component +### Progetta e crea applicazioni utilizzando componenti predefiniti. + +Budibase è dotato di componenti predefiniti belli e potenti che puoi utilizzare come mattoni per costruire la tua interfaccia utente. Esporremo anche molte delle tue opzioni di stile CSS preferite in modo che tu possa esprimere una creatività maggiore. [Richiedi un nuovo componente](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas). + +

+ Design Budibase +

+

+ +### Automatizza processi, integra altri strumenti e collegati a webhook +Risparmia tempo automatizzando processi manuali e flussi di lavoro. Che si tratti di connettersi a webhook o automatizzare email, basta dire a Budibase cosa fare e lasciarlo lavorare per te. Puoi facilmente [creare una nuova automazione per Budibase qui](https://github.com/Budibase/automations) o [Richiedere una nuova automazione](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas). + +

+ Automazioni Budibase +

+

+ +### Integrazione con i tuoi strumenti preferiti +Budibase si integra con vari strumenti popolari, consentendoti di creare applicazioni che si adattano perfettamente alla tua stack tecnologica. + +

+ Integrazioni Budibase +

+

+ +### Paradiso degli amministratori +Budibase è progettato per crescere. Con Budibase, puoi auto-ospitarti sulla tua infrastruttura e gestire globalmente utenti, home, SMTP, applicazioni, gruppi, aspetto e altro ancora. Puoi anche fornire agli utenti/gruppi un portale delle applicazioni e affidare la gestione degli utenti al responsabile del gruppo. + +- Guarda il video promozionale: https://youtu.be/xoljVpty_Kw + +


+ +## 🏁 Inizio + + + +Implementa Budibase self-hosted nella tua infrastruttura esistente, utilizzando Docker, Kubernetes e Digital Ocean. +Oppure utilizza Budibase Cloud se non hai bisogno di auto-ospitare e desideri iniziare rapidamente. + +### [Inizia con Budibase](https://budibase.com) + + +

+ +## 🎓 Imparare Budibase + +La documentazione Budibase [è qui](https://docs.budibase.com). +
+ + +

+ +## 💬 Comunità + +Se hai domande o vuoi discutere con altri utenti di Budibase e unirti alla nostra comunità, vai su: [Discussioni Github](https://github.com/Budibase/budibase/discussions) + +


+ + +## ❗ Codice di condotta + +Budibase si impegna a offrire a tutti un'esperienza accogliente, diversificata e priva di molestie. Ci aspettiamo che tutti i membri della comunità Budibase rispettino i principi del nostro [**Codice di condotta**](https://github.com/Budibase/budibase/blob/HEAD/.github/CODE_OF_CONDUCT.md). Grazie per la tua attenzione. +
+ + +

+ + +## 🙌 Contribuire a Budibase + +Che tu stia aprendo un rapporto di bug o creando una Pull request, ogni contributo è apprezzato e benvenuto. Se stai pensando di implementare una nuova funzionalità o modificare l'API, crea prima un Issue. In questo modo possiamo assicurarci che il tuo lavoro non sia inutile. + +### Non sai da dove cominciare ? +Un buon punto di partenza per contribuire è qui: [Progetti in corso](https://github.com/Budibase/budibase/projects/22). + +### Come è organizzato il repo ? +Budibase è un monorepo gestito da lerna. Lerna gestisce la costruzione e la pubblicazione dei pacchetti di Budibase. Ecco, a grandi linee, i pacchetti che compongono Budibase. + +- [packages/builder](https://github.com/Budibase/budibase/tree/HEAD/packages/builder) - contiene il codice per l'applicazione svelte lato client di budibase builder. + +- [packages/client](https://github.com/Budibase/budibase/tree/HEAD/packages/client) - Un modulo che viene eseguito nel browser e che è responsabile della lettura delle definizioni JSON e della creazione di applicazioni web viventi da esse. + +- [packages/server](https://github.com/Budibase/budibase/tree/HEAD/packages/server) - Il server budibase. Questa applicazione Koa è responsabile del servizio del JS per le applicazioni builder e budibase, oltre a fornire l'API per l'interazione con il database e il filesystem. + +Per ulteriori informazioni, vedere [CONTRIBUTING.md](https://github.com/Budibase/budibase/blob/HEAD/.github/CONTRIBUTING.md) + +

+ + +## 📝 Licenza + +Budibase è open source, con licenza [GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html). Le librerie client e dei componenti sono con licenza [MPL](https://directory.fsf.org/wiki/License:MPL-2.0) - quindi le applicazioni che crei possono essere utilizzate con licenza come desideri. + +

+ +## ⭐ Stargazers nel tempo + +[![Stargazers nel tempo](https://starchart.cc/Budibase/budibase.svg)](https://starchart.cc/Budibase/budibase) + +Se riscontri problemi tra gli aggiornamenti del builder, utilizza la seguente guida [qui](https://github.com/Budibase/budibase/blob/HEAD/.github/CONTRIBUTING.md#troubleshooting) per pulire il tuo ambiente. + +

+ +## Contributeurs ✨ + +Grazie a queste meravigliose persone ([emoji key](https://allcontributors.org/docs/en/emoji-key)): + + + + + + + + + + + + + + + + + + + + + + + +

Martin McKeaveney

💻 📖 ⚠️ 🚇

Michael Drury

📖 💻 ⚠️ 🚇

Andrew Kingston

📖 💻 ⚠️ 🎨

Michael Shanks

📖 💻 ⚠️

Kevin Åberg Kultalahti

📖 💻 ⚠️

Joe

📖 💻 🖋 🎨

Rory Powell

💻 📖 ⚠️

Peter Clement

💻 📖 ⚠️

Conor Mack

💻 📖

Dominic Cave

💻 📖

Rabonaire

💻 📖 🐛

Alex Yeung

📖 💻

Sam Woods

📖 💻 🚇

ScooterSwope

💻 📖
+ + + + + +Questo progetto segue il [convenant del contribuente](https://github.com/Budibase/budibase/blob/master/CODE_OF_CONDUCT.md). Ogni contributo è il benvenuto! + + + + + diff --git a/i18n/README.por.md b/i18n/README.por.md index b23988cac5..b8954dbe22 100644 --- a/i18n/README.por.md +++ b/i18n/README.por.md @@ -11,7 +11,7 @@ A plataforma low-code que você vai adorar usar

- Budibase é uma plataforma low-code open source e é a maneira mais fácil de criar ferramentas internas que aumentam a produtividade. + Budibase é uma plataforma low-code de código aberto e é a maneira mais fácil de criar ferramentas internas que melhoram a produtividade.

@@ -25,15 +25,15 @@

- Todas as releases do GitHub + GitHub todos os releases - Release do GitHub (em ordem cronológica) + GitHub release (por ordem cronológica) Siga @budibase - Código de conduta + Código de Conduta @@ -44,7 +44,7 @@ · Documentação · - Solicitações de melhoria + Solicitar melhorias · Reportar um bug · @@ -52,37 +52,160 @@



+## ✨ Recursos -## ✨ Funcionalidades - -### Construa e implante um verdadeiro software -Ao contrário de outras plataformas, com Budibase você constrói e implanta aplicativos de página única. Os aplicativos Budibase são altamente performáticos e podem ser designados de forma responsiva, proporcionando assim aos seus usuários uma experiência excepcional. +### Construa e implante um software real +Ao contrário de outras plataformas, com o Budibase você constrói e implanta aplicativos de uma página. Os aplicativos Budibase são altamente performáticos e podem ser designados de forma responsiva, proporcionando uma experiência excepcional aos seus usuários.

-### Fonte livre e extensível -Budibase é software livre - sob licença GPL v3. Isso deve lhe dar tranquilidade de que Budibase estará sempre por aqui. Você também pode codificar no Budibase ou bifurcá-lo e fazer alterações como quiser, tornando-o uma experiência amigável para desenvolvedores. +### Código-fonte livre e extensível +Budibase é software livre - sob a licença GPL v3. Isso deve lhe dar confiança de que o Budibase estará sempre disponível. Você também pode codificar no Budibase ou bifurcá-lo e fazer alterações conforme desejar, tornando-o amigável para desenvolvedores.

### Importar dados ou começar do zero -Budibase pode extrair dados de várias fontes, incluindo MongoDB, CouchDB, PostgreSQL, MySQL, Airtable, S3, DynamoDB ou uma API REST. E ao contrário de outras plataformas, com Budibase, você pode começar do zero e criar aplicativos de negócios sem nenhuma fonte de dados. [Solicitar uma nova fonte de dados](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas). +Budibase pode extrair dados de várias fontes, incluindo MongoDB, CouchDB, PostgreSQL, MySQL, Airtable, S3, DynamoDB ou uma API REST. E ao contrário de outras plataformas, com o Budibase você pode começar do zero e criar aplicativos de negócios sem nenhuma fonte de dados. [Solicitar uma nova fonte de dados](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas).

- Dados do Budibase + Dados Budibase



-### Design e criação de aplicativos usando componentes pré-definidos. - -Budibase vem com componentes belamente projetados e poderosos que você pode usar como blocos de construção para construir sua interface do usuário. Também expomos muitas de suas opções de estilo CSS favoritas para que você possa ser mais criativo. [Solicitar um novo componente](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas). +### Projetar e criar aplicativos usando componentes pré-definidos +O Budibase vem com componentes lindamente projetados e poderosos que você pode usar como blocos de construção para criar sua interface do usuário. Também oferecemos muitas das suas opções de estilo CSS favoritas para que você possa mostrar sua criatividade. [Solicitar um novo componente](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas).

- Design do Budibase + Design Budibase



-### Automatize processos, integre outras ferramentas e se conecte a webhooks +### Automatizar processos, integrar outras ferramentas e conectar webhooks Economize tempo automatizando processos manuais e fluxos de trabalho. Seja conectando-se a webhooks ou automatizando e-mails, basta dizer ao Budibase o que fazer e deixá-lo trabalhar para você. Você pode facilmente [criar uma nova automação para o Budibase aqui](https://github.com/Budibase/automations) ou [Solicitar uma nova automação](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas).

- Automações do Budibase + Automações Budibase +

+

+ +### Integração com suas ferramentas favoritas +O Budibase se integra a várias ferramentas populares, permitindo que você crie aplicativos que se encaixam perfeitamente em sua pilha tecnológica. + +

+ Integrações Budibase +

+

+ +### Paraíso dos administradores +O Budibase é projetado para escalar. Com o Budibase, você pode se auto-hospedar em sua própria infraestrutura e gerenciar globalmente usuários, home, SMTP, aplicativos, grupos, aparência e muito mais. Você também pode fornecer aos usuários/grupos um portal de aplicativos e delegar o gerenciamento de usuários ao líder do grupo. + +- Assista ao vídeo promocional: https://youtu.be/xoljVpty_Kw + +


+ +## 🏁 Começar + + + +Implante o Budibase em auto-hospedagem em sua infraestrutura existente, usando Docker, Kubernetes e Digital Ocean. +Ou use o Budibase Cloud se você não precisar se auto-hospedar e quiser começar rapidamente. + +### [Começar com o Budibase](https://budibase.com) + + +

+ +## 🎓 Aprenda Budibase + +A documentação Budibase [está aqui](https://docs.budibase.com). +
+ + +

+ +## 💬 Comunidade + +Se você tiver alguma dúvida ou quiser conversar com outros usuários do Budibase e se juntar à nossa comunidade, visite [Discussões do Github](https://github.com/Budibase/budibase/discussions) + +


+ + +## ❗ Código de Conduta + +O Budibase está comprometido em oferecer a todos uma experiência acolhedora, diversificada e livre de assédio. Esperamos que todos os membros da comunidade Budibase sigam os princípios do nosso [**Código de Conduta**](https://github.com/Budibase/budibase/blob/HEAD/.github/CODE_OF_CONDUCT.md). Obrigado por ler. +
+ + +

+ + +## 🙌 Contribuindo para o Budibase + +Seja abrindo uma issue ou criando um pull request, toda contribuição é apreciada e bem-vinda. Se você está pensando em implementar uma nova funcionalidade ou alterar a API, por favor, crie primeiro uma Issue. Assim, podemos garantir que seu trabalho não seja em vão. + +### Não sabe por onde começar? +Um bom lugar para começar a contribuir é aqui: [Projetos em andamento](https://github.com/Budibase/budibase/projects/22). + +### Como o repositório está organizado? +O Budibase é um monorepo gerenciado pelo lerna. O Lerna cuida da construção e publicação dos pacotes do Budibase. Aqui estão, em alto nível, os pacotes que compõem o Budibase. + +- [packages/builder](https://github.com/Budibase/budibase/tree/HEAD/packages/builder) - contém o código para o aplicativo svelte do lado do cliente do budibase builder. + +- [packages/client](https://github.com/Budibase/budibase/tree/HEAD/packages/client) - Um módulo que roda no navegador e é responsável por ler definições JSON e criar aplicativos web dinâmicos a partir delas. + +- [packages/server](https://github.com/Budibase/budibase/tree/HEAD/packages/server) - O servidor budibase. Este aplicativo Koa é responsável por servir o JS para os aplicativos builder e budibase, bem como fornecer a API para interagir com o banco de dados e o sistema de arquivos. + +Para mais informações, veja [CONTRIBUTING.md](https://github.com/Budibase/budibase/blob/HEAD/.github/CONTRIBUTING.md) + +

+ + +## 📝 Licença + +O Budibase é open source, sob a licença [GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html). As bibliotecas do cliente e dos componentes estão licenciadas sob [MPL](https://directory.fsf.org/wiki/License:MPL-2.0) - para que os aplicativos que você cria possam ser usados sob licença como você desejar. + +

+ +## ⭐ Stargazers ao longo do tempo + +[![Stargazers ao longo do tempo](https://starchart.cc/Budibase/budibase.svg)](https://starchart.cc/Budibase/budibase) + +Se você tiver problemas entre as atualizações do builder, por favor, use o guia a seguir [aqui](https://github.com/Budibase/budibase/blob/HEAD/.github/CONTRIBUTING.md#troubleshooting) para limpar seu ambiente. + +

+ +## Contribuidores ✨ + +Agradecimentos a estas pessoas maravilhosas ([chave de emoji](https://allcontributors.org/docs/fr/emoji-key)): + + + + + + + + + + + + + + + + + + + + + + +

Martin McKeaveney

💻 📖 ⚠️ 🚇

Michael Drury

📖 💻 ⚠️ 🚇

Andrew Kingston

📖 💻 ⚠️ 🎨

Michael Shanks

📖 💻 ⚠️

Kevin Åberg Kultalahti

📖 💻 ⚠️

Joe

📖 💻 🖋 🎨

Rory Powell

💻 📖 ⚠️

Peter Clement

💻 📖 ⚠️

Conor Mack

💻 📖 ⚠️

Grays-world

💻

Sylvain Galand

💻 📖

John Mullins

💻

Jakeboyd

💻

Steve Bridle

💻
+ + + +

+ + +## Licença + +Distribuído sob a licença GPL v3.0. Veja `LICENSE` para mais informações. +

diff --git a/i18n/README.ru.md b/i18n/README.ru.md index 61e5a00550..b235828a40 100644 --- a/i18n/README.ru.md +++ b/i18n/README.ru.md @@ -8,10 +8,10 @@

- Платформа low-code, которую вы будете любить использовать + Низкокодовая платформа, которую вы полюбите использовать

- Budibase - это open source платформа low-code, которая является самым простым способом создания внутренних инструментов, повышающих производительность. + Budibase - это открытая низкокодовая платформа, которая представляет собой самый простой способ создания внутренних инструментов, повышающих производительность.

@@ -25,10 +25,10 @@

- Все скачивания с GitHub + GitHub все релизы - Релизы GitHub (в хронологическом порядке) + GitHub релизы (в хронологическом порядке) Подписаться на @budibase @@ -44,7 +44,7 @@ · Документация · - Запросы на улучшение + Запросы на улучшения · Сообщить об ошибке · @@ -52,32 +52,156 @@



+## ✨ Функциональные возможности -## ✨ Функциональности - -### Создание и развертывание настоящего программного обеспечения -В отличие от других платформ, с Budibase вы создаете и развертываете одностраничные приложения. Приложения Budibase обладают высокой производительностью и могут быть разработаны с адаптивным дизайном, обеспечивая пользователям исключительный опыт. +### Строим и развертываем настоящее программное обеспечение +В отличие от других платформ, с помощью Budibase вы создаете и развертываете одностраничные приложения. Приложения Budibase имеют высокую производительность и могут быть адаптированы для разных устройств, обеспечивая вашим пользователям удивительный опыт.

-### Свободный и расширяемый исходный код -Budibase - это свободное программное обеспечение под лицензией GPL v3. Это должно дать вам уверенность в том, что Budibase всегда будет доступен. Вы также можете кодировать в Budibase или создать его форк и вносить изменения по своему усмотрению, что делает его дружественным для разработчиков. +### Открытый и расширяемый исходный код +Budibase - это свободное программное обеспечение под лицензией GPL v3. Это должно вас уверить в том, что Budibase всегда будет здесь. Вы также можете писать код в Budibase или форкнуть его и вносить изменения по своему усмотрению, что сделает его дружелюбным для разработчиков.

### Импорт данных или начало с нуля -Budibase может извлекать данные из различных источников, включая MongoDB, CouchDB, PostgreSQL, MySQL, Airtable, S3, DynamoDB или REST API. И в отличие от других платформ, с Budibase вы можете начать с нуля и создавать деловые приложения без каких-либо источников данных. [Запросить новый источник данных](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas). +Budibase может получать данные из различных источников, включая MongoDB, CouchDB, PostgreSQL, MySQL, Airtable, S3, DynamoDB или REST API. И в отличие от других платформ, с помощью Budibase вы можете начать с нуля и создавать бизнес-приложения без каких-либо источников данных. [Запросить новый источник данных](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas).

- Данные Budibase + Budibase data



-### Проектирование и создание приложений с помощью предварительно определенных компонентов -Budibase поставляется с красиво спроектированными и мощными компонентами, которые можно использовать как строительные блоки для создания вашего пользовательского интерфейса. Мы также предоставляем множество ваших любимых опций стилей CSS, чтобы вы могли проявить свою творческую мысль. [Запросить новый компонент](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas). +### Проектирование и создание приложений с использованием предварительно определенных компонентов. + +Budibase поставляется с красиво оформленными и мощными компонентами, которые вы можете использовать как строительные блоки для создания вашего пользовательского интерфейса. Мы также предоставляем множество ваших любимых опций стилей CSS, чтобы вы могли проявить больше креативности. [Запросить новый компонент](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas).

- Дизайн Budibase + Budibase design



-### Автоматизация процессов, интеграция с другими инструментами и подключение веб-хуков -Экономьте время, автоматизируя ручные процессы и рабочие пот +### Автоматизация процессов, интеграция с другими инструментами и подключение к вебхукам +Экономьте время, автоматизируя ручные процессы и рабочие потоки. Будь то подключение к вебхукам или автоматизация отправки электронных писем, просто скажите Budibase, что он должен делать, и позвольте ему работать за вас. Вы можете легко [создать новую автоматизацию для Budibase здесь](https://github.com/Budibase/automations) или [Запросить новую автоматизацию](https://github.com/Budibase/budibase/discussions?discussions_q=category%3AIdeas). + +

+ Budibase automations +

+

+ +### Интеграция с вашими любимыми инструментами +Budibase интегрируется с рядом популярных инструментов, что позволяет вам создавать приложения, которые идеально вписываются в вашу технологическую стопку. + +

+ Budibase integrations +

+

+ +### Рай для админов +Budibase разработан для масштабирования. С Budibase вы можете самостоятельно размещать его на своей собственной инфраструктуре и глобально управлять пользователями, доменами, SMTP, приложениями, группами, внешним видом и многим другим. Вы также можете предоставить пользователям/группам портал приложений и поручить управление пользователями руководителю группы. + +- Смотрите промо-видео: https://youtu.be/xoljVpty_Kw + +


+ +## 🏁 Начало работы + + + +Разверните Budibase на своей собственной инфраструктуре с использованием Docker, Kubernetes и Digital Ocean. +Или используйте Budibase Cloud, если вам не нужно самостоятельно размещаться, и вы хотите быстро начать. + +### [Начать работу с Budibase](https://budibase.com) + + +

+ +## 🎓 Изучение Budibase + +Документация Budibase [здесь](https://docs.budibase.com). +
+ + +

+ +## 💬 Сообщество + +Если у вас есть вопросы или вы хотите обсудить что-то с другими пользователями Budibase и присоединиться к нашему сообществу, пожалуйста, перейдите по следующей ссылке: [Обсуждения на GitHub](https://github.com/Budibase/budibase/discussions) + +


+ + +## ❗ Кодекс поведения + +Budibase обязуется обеспечить каждому дружелюбный, разнообразный и безопасный опыт. Мы ожидаем, что все члены сообщества Budibase будут следовать принципам нашего [**Кодекса поведения**](https://github.com/Budibase/budibase/blob/HEAD/.github/CODE_OF_CONDUCT.md). Спасибо за внимание. +
+ + +

+ + +## 🙌 Вклад в Budibase + +Будь то открытие ошибки или создание запроса на включение изменений, любой вклад приветствуется и приветствуется. Если вы планируете реализовать новую функциональность или изменить API, сначала создайте Issue. Так мы сможем убедиться, что ваша работа не напрасна. + +### Не знаете, с чего начать? +Хорошее место для начала вклада - это здесь: [Текущие проекты](https://github.com/Budibase/budibase/projects/22). + +### Как организован репозиторий? +Budibase - это монорепозиторий, управляемый с помощью lerna. Lerna управляет сборкой и публикацией пакетов Budibase. Вот, в общих чертах, пакеты, из которых состоит Budibase. + +- [packages/builder](https://github.com/Budibase/budibase/tree/HEAD/packages/builder) - содержит код клиентского приложения Svelte для Budibase builder. + +- [packages/client](https://github.com/Budibase/budibase/tree/HEAD/packages/client) - Модуль, который запускается в браузере и отвечает за чтение JSON-определений и создание веб-приложений из них. + +- [packages/server](https://github.com/Budibase/budibase/tree/HEAD/packages/server) - Сервер Budibase. Это приложение Koa отвечает за предоставление JS для строителей и приложений Budibase, а также предоставляет API для взаимодействия с базой данных и файловой системой. + +Для получения дополнительной информации см. [CONTRIBUTING.md](https://github.com/Budibase/budibase/blob/HEAD/.github/CONTRIBUTING.md) + +

+ + +## 📝 Лицензия + +Budibase является проектом с открытым исходным кодом, лицензированным по [GPL v3](https://www.gnu.org/licenses/gpl-3.0.en.html). Клиентские библиотеки и компоненты лицензируются по [MPL](https://directory.fsf.org/wiki/License:MPL-2.0), так что приложения, которые вы создаете, могут использоваться под любой лицензией, как вам угодно. + +

+ +## ⭐ Старгейзеры во времени + +[![Stargazers во времени](https://starchart.cc/Budibase/budibase.svg)](https://starchart.cc/Budibase/budibase) + +Если у вас возникли проблемы между обновлениями билдера, пожалуйста, используйте следующее руководство [здесь](https://github.com/Budibase/budibase/blob/HEAD/.github/CONTRIBUTING.md#troubleshooting), чтобы очистить ваше окружение. + +

+ +## Участники ✨ + +Благодарим этих замечательных людей ([ключи эмодзи](https://allcontributors.org/docs/ru/emoji-key)): + + + + + + + + + + + + + + + + + + + + + + + +

Martin McKeaveney

💻 📖 ⚠️ 🚇

Michael Drury

📖 💻 ⚠️ 🚇

Andrew Kingston

📖 💻 ⚠️ 🎨

Michael Shanks

📖 💻 ⚠️

Kevin Åberg Kultalahti

📖 💻 ⚠️

Joe

📓

Nico Kleynhans

🎨

Keith Lee

🎨

Ben-Shabs

📓

Reece King

🎨

Gunjan Chhabra

📓

Stavros Liaskos

🎨

theshu8

📓

Kleebster

📓
+ + + + +

From 31fccf23a8fa2209ccff5829488377804c79bf0e Mon Sep 17 00:00:00 2001 From: Dean Date: Wed, 8 May 2024 09:23:30 +0100 Subject: [PATCH 11/29] Add font load event to allow the header to redraw as the fonts load --- .../builder/app/[application]/_layout.svelte | 30 ++++++++++++------- .../builder/src/stores/builder/builder.js | 11 +++++++ 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/packages/builder/src/pages/builder/app/[application]/_layout.svelte b/packages/builder/src/pages/builder/app/[application]/_layout.svelte index 60c45fd2e4..a6ba91d7fd 100644 --- a/packages/builder/src/pages/builder/app/[application]/_layout.svelte +++ b/packages/builder/src/pages/builder/app/[application]/_layout.svelte @@ -104,6 +104,10 @@ } onMount(async () => { + document.fonts.onloadingdone = e => { + builderStore.loadFonts(e.fontfaces) + } + if (!hasSynced && application) { try { await API.syncApp(application) @@ -144,17 +148,21 @@ /> - {#each $layout.children as { path, title }} - - - - {/each} + {#key $builderStore?.fonts} + + {#each $layout.children as { path, title }} + + + + {/each} + + {/key}
diff --git a/packages/builder/src/stores/builder/builder.js b/packages/builder/src/stores/builder/builder.js index d002062da9..055498bc91 100644 --- a/packages/builder/src/stores/builder/builder.js +++ b/packages/builder/src/stores/builder/builder.js @@ -14,6 +14,7 @@ export const INITIAL_BUILDER_STATE = { tourKey: null, tourStepKey: null, hoveredComponentId: null, + fonts: null, } export class BuilderStore extends BudiStore { @@ -36,6 +37,16 @@ export class BuilderStore extends BudiStore { this.websocket } + loadFonts(fontFaces) { + const ff = fontFaces.map( + fontFace => `${fontFace.family}-${fontFace.weight}` + ) + this.update(state => ({ + ...state, + fonts: [...(state.fonts || []), ...ff], + })) + } + init(app) { if (!app?.appId) { console.error("BuilderStore: No appId supplied for websocket") From 58987d40e48b887ae742391524300d2253944061 Mon Sep 17 00:00:00 2001 From: Dean Date: Mon, 13 May 2024 09:56:39 +0100 Subject: [PATCH 12/29] Removed unnecessary span tag --- .../builder/app/[application]/_layout.svelte | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/packages/builder/src/pages/builder/app/[application]/_layout.svelte b/packages/builder/src/pages/builder/app/[application]/_layout.svelte index a6ba91d7fd..f100260343 100644 --- a/packages/builder/src/pages/builder/app/[application]/_layout.svelte +++ b/packages/builder/src/pages/builder/app/[application]/_layout.svelte @@ -149,19 +149,17 @@ {#key $builderStore?.fonts} - - {#each $layout.children as { path, title }} - - - - {/each} - + {#each $layout.children as { path, title }} + + + + {/each} {/key}
From 92348fb526a103bf9d9d6d9d652b9301a6b3a6e0 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Mon, 13 May 2024 12:53:44 +0100 Subject: [PATCH 13/29] Changing the logic of how automation thread timeout gets applied, so that it can be used properly. --- .../builder/src/stores/builder/automations.js | 15 +++++++++++---- packages/server/src/api/controllers/automation.ts | 3 +-- packages/server/src/environment.ts | 10 ++++++---- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/packages/builder/src/stores/builder/automations.js b/packages/builder/src/stores/builder/automations.js index a31b05a8d8..90ba88b3e7 100644 --- a/packages/builder/src/stores/builder/automations.js +++ b/packages/builder/src/stores/builder/automations.js @@ -166,10 +166,17 @@ const automationActions = store => ({ await store.actions.save(newAutomation) }, test: async (automation, testData) => { - const result = await API.testAutomation({ - automationId: automation?._id, - testData, - }) + const baseError = "Something went wrong testing your automation" + let result + try { + result = await API.testAutomation({ + automationId: automation?._id, + testData, + }) + } catch (err) { + const message = err.message || err.status || JSON.stringify(err) + throw `${baseError} - ${message}` + } if (!result?.trigger && !result?.steps?.length) { if (result?.err?.code === "usage_limit_exceeded") { throw "You have exceeded your automation quota" diff --git a/packages/server/src/api/controllers/automation.ts b/packages/server/src/api/controllers/automation.ts index b986b5232b..5b199341b1 100644 --- a/packages/server/src/api/controllers/automation.ts +++ b/packages/server/src/api/controllers/automation.ts @@ -279,8 +279,7 @@ export async function trigger(ctx: UserCtx) { { fields: ctx.request.body.fields, timeout: - ctx.request.body.timeout * 1000 || - env.getDefaults().AUTOMATION_SYNC_TIMEOUT, + ctx.request.body.timeout * 1000 || env.AUTOMATION_THREAD_TIMEOUT, }, { getResponses: true } ) diff --git a/packages/server/src/environment.ts b/packages/server/src/environment.ts index d9d299d5fa..2c91f1cb48 100644 --- a/packages/server/src/environment.ts +++ b/packages/server/src/environment.ts @@ -20,7 +20,7 @@ function parseIntSafe(number?: string) { const DEFAULTS = { QUERY_THREAD_TIMEOUT: 15000, - AUTOMATION_THREAD_TIMEOUT: 12000, + AUTOMATION_THREAD_TIMEOUT: 15000, AUTOMATION_SYNC_TIMEOUT: 120000, AUTOMATION_MAX_ITERATIONS: 200, JS_PER_EXECUTION_TIME_LIMIT_MS: 1500, @@ -34,6 +34,10 @@ const DEFAULTS = { const QUERY_THREAD_TIMEOUT = parseIntSafe(process.env.QUERY_THREAD_TIMEOUT) || DEFAULTS.QUERY_THREAD_TIMEOUT +const DEFAULT_AUTOMATION_TIMEOUT = + QUERY_THREAD_TIMEOUT > DEFAULTS.AUTOMATION_THREAD_TIMEOUT + ? QUERY_THREAD_TIMEOUT + : DEFAULTS.AUTOMATION_THREAD_TIMEOUT const environment = { // features APP_FEATURES: process.env.APP_FEATURES, @@ -75,9 +79,7 @@ const environment = { QUERY_THREAD_TIMEOUT: QUERY_THREAD_TIMEOUT, AUTOMATION_THREAD_TIMEOUT: parseIntSafe(process.env.AUTOMATION_THREAD_TIMEOUT) || - DEFAULTS.AUTOMATION_THREAD_TIMEOUT > QUERY_THREAD_TIMEOUT - ? DEFAULTS.AUTOMATION_THREAD_TIMEOUT - : QUERY_THREAD_TIMEOUT, + DEFAULT_AUTOMATION_TIMEOUT, BB_ADMIN_USER_EMAIL: process.env.BB_ADMIN_USER_EMAIL, BB_ADMIN_USER_PASSWORD: process.env.BB_ADMIN_USER_PASSWORD, PLUGINS_DIR: process.env.PLUGINS_DIR || DEFAULTS.PLUGINS_DIR, From 5db7b851d3347ae8b8e323a7d0d7aacd85d41340 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 13 May 2024 13:33:55 +0100 Subject: [PATCH 14/29] Fix null dereference error when selected cell ID is undefined --- packages/frontend-core/src/components/grid/lib/utils.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/frontend-core/src/components/grid/lib/utils.js b/packages/frontend-core/src/components/grid/lib/utils.js index b105d12714..5dd56dbbd9 100644 --- a/packages/frontend-core/src/components/grid/lib/utils.js +++ b/packages/frontend-core/src/components/grid/lib/utils.js @@ -5,11 +5,11 @@ import { TypeIconMap } from "../../../constants" // using something very unusual to avoid this problem const JOINING_CHARACTER = "‽‽" -export const parseCellID = rowId => { - if (!rowId) { - return undefined +export const parseCellID = cellId => { + if (!cellId) { + return { id: undefined, field: undefined } } - const parts = rowId.split(JOINING_CHARACTER) + const parts = cellId.split(JOINING_CHARACTER) const field = parts.pop() return { id: parts.join(JOINING_CHARACTER), field } } From 58cda93b08f94e4698138e9c0d8541a156127f88 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Mon, 13 May 2024 13:33:59 +0100 Subject: [PATCH 15/29] PR comments. --- packages/builder/src/stores/builder/automations.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/builder/src/stores/builder/automations.js b/packages/builder/src/stores/builder/automations.js index 90ba88b3e7..cbe48cef33 100644 --- a/packages/builder/src/stores/builder/automations.js +++ b/packages/builder/src/stores/builder/automations.js @@ -166,7 +166,6 @@ const automationActions = store => ({ await store.actions.save(newAutomation) }, test: async (automation, testData) => { - const baseError = "Something went wrong testing your automation" let result try { result = await API.testAutomation({ @@ -175,7 +174,7 @@ const automationActions = store => ({ }) } catch (err) { const message = err.message || err.status || JSON.stringify(err) - throw `${baseError} - ${message}` + throw `Automation test failed - ${message}` } if (!result?.trigger && !result?.steps?.length) { if (result?.err?.code === "usage_limit_exceeded") { From 4516995ef5d2d67cca0b581c571695b864948e62 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 13 May 2024 13:44:50 +0100 Subject: [PATCH 16/29] Remove leftover repeat param in grids --- packages/client/src/components/app/GridBlock.svelte | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/client/src/components/app/GridBlock.svelte b/packages/client/src/components/app/GridBlock.svelte index 5b73019393..bf1dc5ede5 100644 --- a/packages/client/src/components/app/GridBlock.svelte +++ b/packages/client/src/components/app/GridBlock.svelte @@ -19,7 +19,6 @@ export let columns = null export let onRowClick = null export let buttons = null - export let repeat = null const context = getContext("context") const component = getContext("component") @@ -159,7 +158,6 @@ {fixedRowHeight} {columnWhitelist} {schemaOverrides} - {repeat} canAddRows={allowAddRows} canEditRows={allowEditRows} canDeleteRows={allowDeleteRows} From a5f627e320b01d395d1642c0c8315270a441d83d Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Mon, 13 May 2024 13:50:37 +0100 Subject: [PATCH 17/29] Move grid block provider top level since nesting doesn't matter --- .../src/components/app/GridBlock.svelte | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/packages/client/src/components/app/GridBlock.svelte b/packages/client/src/components/app/GridBlock.svelte index bf1dc5ede5..49b4d2127c 100644 --- a/packages/client/src/components/app/GridBlock.svelte +++ b/packages/client/src/components/app/GridBlock.svelte @@ -145,35 +145,35 @@
- - onRowClick?.({ row: e.detail })} - /> - + onRowClick?.({ row: e.detail })} + />
+ +