Archived
Neueste Version
This commit is contained in:
1 parent
179347a45b
commit
5cc0d238c5
31 files changed
+603
-219
No files matched your search
@@ -0,0 +1,166 @@
|
||||
export default {
|
||||
async openBookingWidget() {
|
||||
const calendarModel = Custom5.model || {};
|
||||
const selection = calendarModel.calendarSelection || null;
|
||||
|
||||
if (!selection) {
|
||||
showAlert(
|
||||
"Bitte zuerst einen Tag oder Zeitraum auswählen.",
|
||||
"warning"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
function pad(value) {
|
||||
return String(value).padStart(2, "0");
|
||||
}
|
||||
|
||||
function parseLocalDateTime(value) {
|
||||
if (!value) return null;
|
||||
|
||||
const text = String(value).trim();
|
||||
const parts = text.split(/[-T:]/g);
|
||||
|
||||
if (parts.length < 3) return null;
|
||||
|
||||
const date = new Date(
|
||||
Number(parts[0]),
|
||||
Number(parts[1]) - 1,
|
||||
Number(parts[2]),
|
||||
Number(parts[3] || 0),
|
||||
Number(parts[4] || 0),
|
||||
Number(parts[5] || 0)
|
||||
);
|
||||
|
||||
return Number.isNaN(date.getTime()) ? null : date;
|
||||
}
|
||||
|
||||
function formatDate(date) {
|
||||
return [
|
||||
date.getFullYear(),
|
||||
pad(date.getMonth() + 1),
|
||||
pad(date.getDate())
|
||||
].join("-");
|
||||
}
|
||||
|
||||
function formatTime(date) {
|
||||
return [
|
||||
pad(date.getHours()),
|
||||
pad(date.getMinutes())
|
||||
].join(":");
|
||||
}
|
||||
|
||||
function formatDateTimeForSql(date) {
|
||||
return `${formatDate(date)} ${formatTime(date)}:00`;
|
||||
}
|
||||
|
||||
const start = parseLocalDateTime(selection.start);
|
||||
const end = parseLocalDateTime(selection.end);
|
||||
|
||||
if (!start || !end) {
|
||||
showAlert(
|
||||
"Die Kalenderauswahl enthält kein gültiges Datum.",
|
||||
"error"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const seatId = String(
|
||||
Custom4.model?.seatId ||
|
||||
appsmith.store.selectedSeatId ||
|
||||
""
|
||||
).trim();
|
||||
|
||||
const seatName = String(
|
||||
Custom4.model?.seatName ||
|
||||
appsmith.store.selectedSeatName ||
|
||||
""
|
||||
).trim();
|
||||
|
||||
if (!seatId) {
|
||||
showAlert(
|
||||
"Es wurde kein Sitzplatz ausgewählt.",
|
||||
"error"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const bookedBy =
|
||||
appsmith.user?.email ||
|
||||
appsmith.user?.username ||
|
||||
null;
|
||||
|
||||
if (!bookedBy) {
|
||||
showAlert(
|
||||
"Der angemeldete Benutzer konnte nicht ermittelt werden.",
|
||||
"error"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const isAllDay =
|
||||
selection.allDay === true ||
|
||||
selection.type === "day" ||
|
||||
selection.type === "days";
|
||||
|
||||
let endDate;
|
||||
let startTime = null;
|
||||
let endTime = null;
|
||||
let endDateTime = end;
|
||||
|
||||
if (isAllDay) {
|
||||
const lastSelectedDay = new Date(end);
|
||||
lastSelectedDay.setDate(lastSelectedDay.getDate() - 1);
|
||||
endDate = formatDate(lastSelectedDay);
|
||||
endDateTime = new Date(lastSelectedDay);
|
||||
endDateTime.setHours(23, 59, 59, 0);
|
||||
} else {
|
||||
endDate = formatDate(end);
|
||||
startTime = formatTime(start);
|
||||
endTime = formatTime(end);
|
||||
}
|
||||
|
||||
const recurringCheckbox =
|
||||
typeof RecurringCheckbox !== "undefined"
|
||||
? RecurringCheckbox
|
||||
: null;
|
||||
|
||||
const bookingFormData = {
|
||||
seatId,
|
||||
seatName,
|
||||
bookedBy,
|
||||
title: "Platzbuchung",
|
||||
type: selection.type || null,
|
||||
startDate: formatDate(start),
|
||||
endDate,
|
||||
startTime,
|
||||
endTime,
|
||||
startDateTime: formatDateTimeForSql(start),
|
||||
endDateTime: formatDateTimeForSql(endDateTime),
|
||||
allDay: Boolean(isAllDay),
|
||||
recurring: Boolean(
|
||||
recurringCheckbox?.isChecked || false
|
||||
)
|
||||
};
|
||||
|
||||
try {
|
||||
await storeValue(
|
||||
"bookingFormData",
|
||||
bookingFormData,
|
||||
false
|
||||
);
|
||||
|
||||
await showModal("Platzbuchung");
|
||||
} catch (error) {
|
||||
console.error(
|
||||
"Buchungsdaten konnten nicht gespeichert werden:",
|
||||
error
|
||||
);
|
||||
|
||||
showAlert(
|
||||
"Die Buchungsdaten konnten nicht gespeichert werden.",
|
||||
"error"
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"gitSyncId": "6a6b5b477ebc9edeca96e2f8_7feb3701-9036-42b6-bda5-53267d59b24e",
|
||||
"id": "Sitzplätze_BookingSelect",
|
||||
"unpublishedCollection": {
|
||||
"name": "BookingSelect",
|
||||
"pageId": "Sitzplätze",
|
||||
"pluginId": "js-plugin",
|
||||
"pluginType": "JS",
|
||||
"variables": []
|
||||
}
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
SELECT
|
||||
id,
|
||||
platz_id,
|
||||
titel AS title,
|
||||
startzeit AS start,
|
||||
endzeit AS end,
|
||||
gebucht_von
|
||||
FROM `buchungen`
|
||||
WHERE platz_id = '{{appsmith.store.selectedSeatId}}'
|
||||
ORDER BY startzeit;
|
||||
|
||||
INSERT INTO `buchungen`
|
||||
(
|
||||
id,
|
||||
titel,
|
||||
startzeit,
|
||||
endzeit,
|
||||
gebucht_von
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
'{{appsmith.store.selectedSeatId}}',
|
||||
'{{InputTitel.text}}',
|
||||
'{{InputStartzeit.text}}',
|
||||
'{{InputEndzeit.text}}',
|
||||
'{{InputGebuchtVon.text}}'
|
||||
);
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"gitSyncId": "6a6b5b477ebc9edeca96e2f8_d245a9e2-35c3-40b1-88d9-d9af14910175",
|
||||
"id": "Sitzplätze_BookingSelect.openBookingWidget",
|
||||
"pluginId": "js-plugin",
|
||||
"pluginType": "JS",
|
||||
"unpublishedAction": {
|
||||
"actionConfiguration": {
|
||||
"encodeParamsToggle": true,
|
||||
"jsArguments": [],
|
||||
"paginationType": "NONE",
|
||||
"timeoutInMillisecond": 10000
|
||||
},
|
||||
"collectionId": "Sitzplätze_BookingSelect",
|
||||
"confirmBeforeExecute": false,
|
||||
"datasource": {
|
||||
"isAutoGenerated": false,
|
||||
"name": "UNUSED_DATASOURCE",
|
||||
"pluginId": "js-plugin"
|
||||
},
|
||||
"dynamicBindingPathList": [
|
||||
{
|
||||
"key": "body"
|
||||
}
|
||||
],
|
||||
"fullyQualifiedName": "BookingSelect.openBookingWidget",
|
||||
"name": "openBookingWidget",
|
||||
"pageId": "Sitzplätze",
|
||||
"runBehaviour": "MANUAL",
|
||||
"userSetOnLoad": false
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
INSERT INTO `buchungen`
|
||||
(
|
||||
`platz_id`,
|
||||
`titel`,
|
||||
`startzeit`,
|
||||
`endzeit`,
|
||||
`gebucht_von`
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
{{ appsmith.store.bookingFormData.seatId }},
|
||||
{{ appsmith.store.bookingFormData.title }},
|
||||
{{ appsmith.store.bookingFormData.startDateTime }},
|
||||
{{ appsmith.store.bookingFormData.endDateTime }},
|
||||
{{ appsmith.store.bookingFormData.bookedBy }}
|
||||
);
|
||||
+4
-4
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"gitSyncId": "6a6b5b477ebc9edeca96e2f8_a4b30cc2-55bd-48f3-a541-3934d1b76d01",
|
||||
"id": "Sitzplätze_BookSeatSQL",
|
||||
"gitSyncId": "6a6b5b477ebc9edeca96e2f8_e0fcb986-9f0b-4eab-bcee-5d1449214ffa",
|
||||
"id": "Sitzplätze_CreateBooking",
|
||||
"pluginId": "mysql-plugin",
|
||||
"pluginType": "DB",
|
||||
"unpublishedAction": {
|
||||
"actionConfiguration": {
|
||||
"body": "SELECT\n id,\n platz_id,\n titel AS title,\n startzeit AS start,\n endzeit AS end,\n gebucht_von\nFROM `buchungen`\nWHERE platz_id = '{{appsmith.store.selectedSeatId}}'\nORDER BY startzeit;\n\nINSERT INTO `buchungen`\n(\n id,\n titel,\n startzeit,\n endzeit,\n gebucht_von\n)\nVALUES\n(\n '{{appsmith.store.selectedSeatId}}',\n '{{InputTitel.text}}',\n '{{InputStartzeit.text}}',\n '{{InputEndzeit.text}}',\n '{{InputGebuchtVon.text}}'\n);",
|
||||
"body": "INSERT INTO `buchungen`\n(\n `platz_id`,\n `titel`,\n `startzeit`,\n `endzeit`,\n `gebucht_von`\n)\nVALUES\n(\n {{ appsmith.store.bookingFormData.seatId }},\n {{ appsmith.store.bookingFormData.title }},\n {{ appsmith.store.bookingFormData.startDateTime }},\n {{ appsmith.store.bookingFormData.endDateTime }},\n {{ appsmith.store.bookingFormData.bookedBy }}\n);",
|
||||
"encodeParamsToggle": true,
|
||||
"paginationType": "NONE",
|
||||
"pluginSpecifiedTemplates": [
|
||||
@@ -27,7 +27,7 @@
|
||||
"key": "body"
|
||||
}
|
||||
],
|
||||
"name": "BookSeatSQL",
|
||||
"name": "CreateBooking",
|
||||
"pageId": "Sitzplätze",
|
||||
"runBehaviour": "MANUAL",
|
||||
"userSetOnLoad": false
|
||||
+2
-1
@@ -6,5 +6,6 @@ SELECT
|
||||
endzeit AS end,
|
||||
gebucht_von
|
||||
FROM `buchungen`
|
||||
WHERE platz_id = '{{appsmith.store.selectedSeatId}}'
|
||||
WHERE platz_id =
|
||||
{{ appsmith.store.selectedSeatId }}
|
||||
ORDER BY startzeit;
|
||||
+4
-4
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"gitSyncId": "6a6b5b477ebc9edeca96e2f8_e0fcb986-9f0b-4eab-bcee-5d1449214ffa",
|
||||
"id": "Sitzplätze_GetBookings",
|
||||
"gitSyncId": "6a6b5b477ebc9edeca96e2f8_a4b30cc2-55bd-48f3-a541-3934d1b76d01",
|
||||
"id": "Sitzplätze_GetSeatBookings",
|
||||
"pluginId": "mysql-plugin",
|
||||
"pluginType": "DB",
|
||||
"unpublishedAction": {
|
||||
"actionConfiguration": {
|
||||
"body": "SELECT\n id,\n platz_id,\n titel AS title,\n startzeit AS start,\n endzeit AS end,\n gebucht_von\nFROM `buchungen`\nWHERE platz_id = '{{appsmith.store.selectedSeatId}}'\nORDER BY startzeit;",
|
||||
"body": "SELECT\n id,\n platz_id,\n titel AS title,\n startzeit AS start,\n endzeit AS end,\n gebucht_von\nFROM `buchungen`\nWHERE platz_id =\n {{ appsmith.store.selectedSeatId }}\nORDER BY startzeit;",
|
||||
"encodeParamsToggle": true,
|
||||
"paginationType": "NONE",
|
||||
"pluginSpecifiedTemplates": [
|
||||
@@ -27,7 +27,7 @@
|
||||
"key": "body"
|
||||
}
|
||||
],
|
||||
"name": "GetBookings",
|
||||
"name": "GetSeatBookings",
|
||||
"pageId": "Sitzplätze",
|
||||
"runBehaviour": "AUTOMATIC",
|
||||
"userSetOnLoad": false
|
||||
@@ -55,11 +55,11 @@
|
||||
"parentRowSpace": 10,
|
||||
"renderMode": "CANVAS",
|
||||
"rightColumn": 64,
|
||||
"seatSelected": "{{\n storeValue(\n \"selectedSeatId\",\n Custom4.model.selectedSeat.id\n )\n .then(() =>\n storeValue(\n \"selectedSeatName\",\n Custom4.model.selectedSeat.name\n )\n )\n .then(() => GetBookings.run())\n .then(() => showModal(SeatCalendar.name))\n}}",
|
||||
"seatSelected": "{{\n showModal(\n \"SeatCalendar\"\n )\n}}",
|
||||
"srcDoc": {
|
||||
"css": "@charset \"UTF-8\";\nhtml,\nbody {\n margin: 0;\n width: 100%;\n height: 100%;\n overflow: auto;\n font-family: Arial, sans-serif;\n}\n\n/* Bild + Overlay */\n#imgHolder {\n position: relative;\n width: 100%;\n height: 700px; /* feste Höhe, damit sicher nicht 0 */\n overflow: hidden;\n border-radius: 6px;\n background: #f3f4f6;\n}\n\n#floorplanImage {\n position: absolute;\n inset: 0;\n z-index: 1;\n display: block;\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n#seatLayer {\n position: absolute;\n inset: 0;\n z-index: 2;\n width: 100%;\n height: 100%;\n pointer-events: none; /* Punkte bekommen später pointer-events:auto */\n}\n\n/* Sitzpunkte */\n.seat {\n position: absolute;\n z-index: 3;\n display: block;\n width: 18px;\n height: 18px;\n padding: 0;\n transform: translate(-50%, -50%);\n border: 2px solid #ffffff;\n border-radius: 50%;\n background: #22c55e;\n color: #22c55e;\n cursor: pointer;\n pointer-events: auto;\n appearance: none;\n box-sizing: border-box;\n box-shadow: 0 0 5px currentColor, 0 0 10px currentColor;\n transition: transform 0.15s ease, box-shadow 0.15s ease;\n}\n\n.seat:hover {\n z-index: 10;\n transform: translate(-50%, -50%) scale(1.45);\n box-shadow: 0 0 8px currentColor, 0 0 16px currentColor;\n}\n\n/* Farben nach Status */\n.seat.frei {\n background: #22c55e; /* Grün */\n color: #22c55e;\n}\n\n.seat.belegt {\n background: #ef4444; /* Rot */\n color: #ef4444;\n}\n\n.seat.selected {\n outline: 3px solid #2563eb;\n outline-offset: 3px;\n}\n\n/* Legende */\n#legend {\n display: flex;\n flex-wrap: wrap;\n gap: 14px;\n margin-top: 8px;\n color: #374151;\n font-size: 13px;\n}\n\n.legendItem {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n\n.legendColor {\n display: inline-block;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n}\n\n.legendColor.frei {\n background: #22c55e;\n}\n\n.legendColor.belegt {\n background: #ef4444;\n}",
|
||||
"html": "<div id=\"seatPlan\">\n\n <div id=\"imgHolder\">\n <!-- Kein src hier, das Bild kommt über JavaScript -->\n <img id=\"floorplanImage\" alt=\"Büroplan\">\n\t\t<div id=\"seatLayer\"></div>\n\t\t\n\t\t\n </div>\n</div>",
|
||||
"js": "let selectedSeat = null;\n\n/**\n * Base64-Bild: WICHTIG – Typ muss zum Inhalt passen!\n * Wenn dein String mit \"iVBORw0KGgo...\" beginnt, ist das PNG:\n */\nconst FLOORPLAN_IMAGE = \"data:image/jpeg;base64,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 truncated
|
||||
"js": "let selectedSeat = null;\n\n/**\n * Base64-Bild: WICHTIG – Typ muss zum Inhalt passen!\n * Wenn dein String mit \"iVBORw0KGgo...\" beginnt, ist das PNG:\n */\nconst FLOORPLAN_IMAGE = \"data:image/jpeg;base64,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 truncated
|
||||
},
|
||||
"theme": "{{appsmith.theme}}",
|
||||
"topRow": 8,
|
||||
@@ -67,7 +67,7 @@
|
||||
"uncompiledSrcDoc": {
|
||||
"css": "html,\nbody {\n margin: 0;\n width: 100%;\n height: 100%;\n overflow: auto;\n font-family: Arial, sans-serif;\n}\n\n\n/* Bild + Overlay */\n#imgHolder {\n position: relative;\n width: 100%;\n height: 700px; /* feste Höhe, damit sicher nicht 0 */\n overflow: hidden;\n border-radius: 6px;\n background: #f3f4f6;\n}\n\n#floorplanImage {\n position: absolute;\n inset: 0;\n z-index: 1;\n display: block;\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n#seatLayer {\n position: absolute;\n inset: 0;\n z-index: 2;\n width: 100%;\n height: 100%;\n pointer-events: none; /* Punkte bekommen später pointer-events:auto */\n}\n\n/* Sitzpunkte */\n.seat {\n position: absolute;\n z-index: 3;\n display: block;\n width: 18px;\n height: 18px;\n padding: 0;\n transform: translate(-50%, -50%);\n border: 2px solid #ffffff;\n border-radius: 50%;\n background: #22c55e;\n color: #22c55e;\n cursor: pointer;\n pointer-events: auto;\n appearance: none;\n box-sizing: border-box;\n box-shadow:\n 0 0 5px currentColor,\n 0 0 10px currentColor;\n transition:\n transform 0.15s ease,\n box-shadow 0.15s ease;\n}\n\n.seat:hover {\n z-index: 10;\n transform: translate(-50%, -50%) scale(1.45);\n box-shadow:\n 0 0 8px currentColor,\n 0 0 16px currentColor;\n}\n\n/* Farben nach Status */\n.seat.frei {\n background: #22c55e; /* Grün */\n color: #22c55e;\n}\n\n.seat.belegt {\n background: #ef4444; /* Rot */\n color: #ef4444;\n}\n\n.seat.selected {\n outline: 3px solid #2563eb;\n outline-offset: 3px;\n}\n\n/* Legende */\n#legend {\n display: flex;\n flex-wrap: wrap;\n gap: 14px;\n margin-top: 8px;\n color: #374151;\n font-size: 13px;\n}\n\n.legendItem {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n\n.legendColor {\n display: inline-block;\n width: 14px;\n height: 14px;\n border-radius: 50%;\n}\n\n.legendColor.frei {\n background: #22c55e;\n}\n\n.legendColor.belegt {\n background: #ef4444;\n}",
|
||||
"html": "<div id=\"seatPlan\">\n\n <div id=\"imgHolder\">\n <!-- Kein src hier, das Bild kommt über JavaScript -->\n <img id=\"floorplanImage\" alt=\"Büroplan\">\n\t\t<div id=\"seatLayer\"></div>\n\t\t\n\t\t\n </div>\n</div>",
|
||||
"js": "let selectedSeat = null;\n\n/**\n * Base64-Bild: WICHTIG – Typ muss zum Inhalt passen!\n * Wenn dein String mit \"iVBORw0KGgo...\" beginnt, ist das PNG:\n */\nconst FLOORPLAN_IMAGE =\n \"data:image/jpeg;base64,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 truncated
|
||||
"js": "let selectedSeat = null;\n\n/**\n * Base64-Bild: WICHTIG – Typ muss zum Inhalt passen!\n * Wenn dein String mit \"iVBORw0KGgo...\" beginnt, ist das PNG:\n */\nconst FLOORPLAN_IMAGE =\n \"data:image/jpeg;base64,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 truncated
|
||||
},
|
||||
"version": 1,
|
||||
"widgetId": "londvdt302",
|
||||
|
||||
+3
-3
@@ -3,7 +3,7 @@
|
||||
"alignWidget": "LEFT",
|
||||
"animateLoading": true,
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"bottomRow": 22,
|
||||
"bottomRow": 38,
|
||||
"defaultCheckedState": true,
|
||||
"dynamicBindingPathList": [
|
||||
{
|
||||
@@ -45,9 +45,9 @@
|
||||
"renderMode": "CANVAS",
|
||||
"responsiveBehavior": "fill",
|
||||
"rightColumn": 43,
|
||||
"topRow": 18,
|
||||
"topRow": 34,
|
||||
"type": "CHECKBOX_WIDGET",
|
||||
"version": 1,
|
||||
"widgetId": "ahhin3wdnq",
|
||||
"widgetName": "Checkbox2"
|
||||
"widgetName": "AllDayCheckbox"
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
|
||||
"animateLoading": true,
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"bottomRow": 26,
|
||||
"boxShadow": "none",
|
||||
"closeOnSelection": true,
|
||||
"dateFormat": "D MMMM, YYYY",
|
||||
"datePickerType": "DATE_PICKER",
|
||||
"defaultDate": "2026-08-17T09:59:18.715Z",
|
||||
"dynamicBindingPathList": [
|
||||
{
|
||||
"key": "accentColor"
|
||||
},
|
||||
{
|
||||
"key": "borderRadius"
|
||||
}
|
||||
],
|
||||
"dynamicHeight": "FIXED",
|
||||
"dynamicTriggerPathList": [],
|
||||
"firstDayOfWeek": 0,
|
||||
"isDisabled": false,
|
||||
"isLoading": false,
|
||||
"isRequired": false,
|
||||
"isVisible": true,
|
||||
"key": "vo3jwhx7du",
|
||||
"label": "Buchung bis",
|
||||
"labelAlignment": "left",
|
||||
"labelPosition": "Top",
|
||||
"labelTextSize": "0.875rem",
|
||||
"labelWidth": 5,
|
||||
"leftColumn": 1,
|
||||
"maxDate": "2121-12-31T18:29:00.000Z",
|
||||
"maxDynamicHeight": 9000,
|
||||
"minDate": "1920-12-31T18:30:00.000Z",
|
||||
"minDynamicHeight": 4,
|
||||
"minWidth": 450,
|
||||
"mobileBottomRow": 18,
|
||||
"mobileLeftColumn": 1,
|
||||
"mobileRightColumn": 21,
|
||||
"mobileTopRow": 11,
|
||||
"needsErrorInfo": false,
|
||||
"parentColumnSpace": 8.875,
|
||||
"parentId": "q44lz1f0e4",
|
||||
"parentRowSpace": 10,
|
||||
"renderMode": "CANVAS",
|
||||
"responsiveBehavior": "fill",
|
||||
"rightColumn": 22,
|
||||
"shortcuts": false,
|
||||
"timePrecision": "None",
|
||||
"topRow": 19,
|
||||
"type": "DATE_PICKER_WIDGET2",
|
||||
"version": 2,
|
||||
"widgetId": "k0y272smyy",
|
||||
"widgetName": "BookingEndDate"
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
|
||||
"animateLoading": true,
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"bottomRow": 18,
|
||||
"boxShadow": "none",
|
||||
"defaultOptionValue": "GREEN",
|
||||
"dynamicBindingPathList": [
|
||||
{
|
||||
"key": "accentColor"
|
||||
},
|
||||
{
|
||||
"key": "borderRadius"
|
||||
},
|
||||
{
|
||||
"key": "sourceData"
|
||||
}
|
||||
],
|
||||
"dynamicHeight": "FIXED",
|
||||
"dynamicPropertyPathList": [
|
||||
{
|
||||
"key": "sourceData"
|
||||
}
|
||||
],
|
||||
"dynamicTriggerPathList": [],
|
||||
"isDisabled": false,
|
||||
"isFilterable": false,
|
||||
"isLoading": false,
|
||||
"isRequired": false,
|
||||
"isVisible": true,
|
||||
"key": "f8k90o33yd",
|
||||
"labelAlignment": "left",
|
||||
"labelPosition": "Top",
|
||||
"labelText": "Endzeit",
|
||||
"labelTextSize": "0.875rem",
|
||||
"labelWidth": 5,
|
||||
"leftColumn": 39,
|
||||
"maxDynamicHeight": 9000,
|
||||
"minDynamicHeight": 4,
|
||||
"minWidth": 450,
|
||||
"mobileBottomRow": 15,
|
||||
"mobileLeftColumn": 22,
|
||||
"mobileRightColumn": 42,
|
||||
"mobileTopRow": 8,
|
||||
"needsErrorInfo": false,
|
||||
"optionLabel": "value",
|
||||
"optionValue": "value",
|
||||
"parentColumnSpace": 8.875,
|
||||
"parentId": "q44lz1f0e4",
|
||||
"parentRowSpace": 10,
|
||||
"placeholderText": "Select option",
|
||||
"renderMode": "CANVAS",
|
||||
"responsiveBehavior": "fill",
|
||||
"rightColumn": 53,
|
||||
"serverSideFiltering": false,
|
||||
"sourceData": "{{\n [\n { label: \"07:30\", value: \"07:30\" },\n { label: \"08:00\", value: \"08:00\" },\n { label: \"08:30\", value: \"08:30\" },\n { label: \"09:00\", value: \"09:00\" },\n { label: \"09:30\", value: \"09:30\" },\n { label: \"10:00\", value: \"10:00\" },\n { label: \"10:30\", value: \"10:30\" },\n { label: \"11:00\", value: \"11:00\" },\n { label: \"11:30\", value: \"11:30\" },\n { label: \"12:00\", value: \"12:00\" },\n { label: \"12:30\", value: \"12:30\" },\n { label: \"13:00\", value: \"13:00\" },\n { label: \"13:30\", value: \"13:30\" },\n { label: \"14:00\", value: \"14:00\" },\n { label: \"14:30\", value: \"14:30\" },\n { label: \"15:00\", value: \"15:00\" },\n { label: \"15:30\", value: \"15:30\" },\n { label: \"16:00\", value: \"16:00\" },\n { label: \"16:30\", value: \"16:30\" },\n { label: \"17:00\", value: \"17:00\" },\n { label: \"17:30\", value: \"17:30\" },\n { label: \"18:00\", value: \"18:00\" }\n ].filter(option => {\n const start =\n BookingStartTime.selectedOptionValue ||\n \"07:00\";\n\n return option.value > start;\n })\n}}",
|
||||
"topRow": 11,
|
||||
"type": "SELECT_WIDGET",
|
||||
"version": 1,
|
||||
"widgetId": "ffcw6h9yvt",
|
||||
"widgetName": "BookingEndTime"
|
||||
}
|
||||
+2
-2
@@ -24,7 +24,7 @@
|
||||
"isRequired": false,
|
||||
"isVisible": true,
|
||||
"key": "vo3jwhx7du",
|
||||
"label": "Datum",
|
||||
"label": "Buchung von",
|
||||
"labelAlignment": "left",
|
||||
"labelPosition": "Top",
|
||||
"labelTextSize": "0.875rem",
|
||||
@@ -52,5 +52,5 @@
|
||||
"type": "DATE_PICKER_WIDGET2",
|
||||
"version": 2,
|
||||
"widgetId": "7g7p1jdnt1",
|
||||
"widgetName": "DatePicker1"
|
||||
"widgetName": "BookingStartDate"
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
|
||||
"animateLoading": true,
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"bottomRow": 18,
|
||||
"boxShadow": "none",
|
||||
"defaultOptionValue": "GREEN",
|
||||
"dynamicBindingPathList": [
|
||||
{
|
||||
"key": "accentColor"
|
||||
},
|
||||
{
|
||||
"key": "borderRadius"
|
||||
},
|
||||
{
|
||||
"key": "sourceData"
|
||||
}
|
||||
],
|
||||
"dynamicHeight": "FIXED",
|
||||
"dynamicPropertyPathList": [
|
||||
{
|
||||
"key": "sourceData"
|
||||
}
|
||||
],
|
||||
"dynamicTriggerPathList": [],
|
||||
"isDisabled": false,
|
||||
"isFilterable": false,
|
||||
"isLoading": false,
|
||||
"isRequired": false,
|
||||
"isVisible": true,
|
||||
"key": "f8k90o33yd",
|
||||
"labelAlignment": "left",
|
||||
"labelPosition": "Top",
|
||||
"labelText": "Startzeit",
|
||||
"labelTextSize": "0.875rem",
|
||||
"labelWidth": 5,
|
||||
"leftColumn": 25,
|
||||
"maxDynamicHeight": 9000,
|
||||
"minDynamicHeight": 4,
|
||||
"minWidth": 450,
|
||||
"mobileBottomRow": 15,
|
||||
"mobileLeftColumn": 22,
|
||||
"mobileRightColumn": 42,
|
||||
"mobileTopRow": 8,
|
||||
"needsErrorInfo": false,
|
||||
"optionLabel": "label",
|
||||
"optionValue": "value",
|
||||
"parentColumnSpace": 8.875,
|
||||
"parentId": "q44lz1f0e4",
|
||||
"parentRowSpace": 10,
|
||||
"placeholderText": "Select option",
|
||||
"renderMode": "CANVAS",
|
||||
"responsiveBehavior": "fill",
|
||||
"rightColumn": 39,
|
||||
"serverSideFiltering": false,
|
||||
"sourceData": "{{\n [\n { label: \"07:00\", value: \"07:00\" },\n { label: \"07:30\", value: \"07:30\" },\n { label: \"08:00\", value: \"08:00\" },\n { label: \"08:30\", value: \"08:30\" },\n { label: \"09:00\", value: \"09:00\" },\n { label: \"09:30\", value: \"09:30\" },\n { label: \"10:00\", value: \"10:00\" },\n { label: \"10:30\", value: \"10:30\" },\n { label: \"11:00\", value: \"11:00\" },\n { label: \"11:30\", value: \"11:30\" },\n { label: \"12:00\", value: \"12:00\" },\n { label: \"12:30\", value: \"12:30\" },\n { label: \"13:00\", value: \"13:00\" },\n { label: \"13:30\", value: \"13:30\" },\n { label: \"14:00\", value: \"14:00\" },\n { label: \"14:30\", value: \"14:30\" },\n { label: \"15:00\", value: \"15:00\" },\n { label: \"15:30\", value: \"15:30\" },\n { label: \"16:00\", value: \"16:00\" },\n { label: \"16:30\", value: \"16:30\" },\n { label: \"17:00\", value: \"17:00\" },\n { label: \"17:30\", value: \"17:30\" }\n ]\n}}",
|
||||
"topRow": 11,
|
||||
"type": "SELECT_WIDGET",
|
||||
"version": 1,
|
||||
"widgetId": "u53n2l4s54",
|
||||
"widgetName": "BookingStartTime"
|
||||
}
|
||||
+17
-6
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"animateLoading": true,
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"bottomRow": 43,
|
||||
"bottomRow": 70,
|
||||
"boxShadow": "none",
|
||||
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
|
||||
"buttonStyle": "PRIMARY_BUTTON",
|
||||
@@ -15,18 +15,29 @@
|
||||
"key": "borderRadius"
|
||||
}
|
||||
],
|
||||
"dynamicPropertyPathList": [
|
||||
{
|
||||
"key": "onClick"
|
||||
}
|
||||
],
|
||||
"dynamicTriggerPathList": [
|
||||
{
|
||||
"key": "onClick"
|
||||
}
|
||||
],
|
||||
"isDefaultClickDisabled": true,
|
||||
"isDisabled": false,
|
||||
"isLoading": false,
|
||||
"isVisible": true,
|
||||
"key": "on7g9pelq6",
|
||||
"leftColumn": 46,
|
||||
"leftColumn": 51,
|
||||
"minWidth": 120,
|
||||
"mobileBottomRow": 22,
|
||||
"mobileLeftColumn": 47,
|
||||
"mobileRightColumn": 63,
|
||||
"mobileTopRow": 18,
|
||||
"needsErrorInfo": false,
|
||||
"onClick": "{{\n CreateBooking\n .run()\n .then(() => {\n return closeModal(\n \"Platzbuchung\"\n );\n })\n .then(() => {\n return GetSeatBookings.run();\n })\n .catch((error) => {\n showAlert(\n \"Die Buchung konnte nicht gespeichert werden.\",\n \"error\"\n );\n\n console.error(\n \"CreateBooking fehlgeschlagen:\",\n error\n );\n });\n}}",
|
||||
"originalBottomRow": 40,
|
||||
"originalTopRow": 36,
|
||||
"parentId": "q44lz1f0e4",
|
||||
@@ -35,11 +46,11 @@
|
||||
"renderMode": "CANVAS",
|
||||
"resetFormOnClick": false,
|
||||
"responsiveBehavior": "hug",
|
||||
"rightColumn": 62,
|
||||
"text": "Confirm",
|
||||
"topRow": 39,
|
||||
"rightColumn": 63,
|
||||
"text": "Buchen",
|
||||
"topRow": 66,
|
||||
"type": "BUTTON_WIDGET",
|
||||
"version": 1,
|
||||
"widgetId": "iutdgcd629",
|
||||
"widgetName": "Button2"
|
||||
"widgetName": "ConfirmBookingButton"
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"animateLoading": true,
|
||||
"bottomRow": 26,
|
||||
"bottomRow": 42,
|
||||
"capSide": 0,
|
||||
"capType": "nc",
|
||||
"dividerColor": "#d4d4d8",
|
||||
@@ -27,7 +27,7 @@
|
||||
"rightColumn": 63,
|
||||
"strokeStyle": "solid",
|
||||
"thickness": 2,
|
||||
"topRow": 22,
|
||||
"topRow": 38,
|
||||
"type": "DIVIDER_WIDGET",
|
||||
"version": 1,
|
||||
"widgetId": "7wun775rq0",
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
"mobileRightColumn": 64,
|
||||
"mobileTopRow": 0,
|
||||
"needsErrorInfo": false,
|
||||
"onClick": "{{closeModal(Platzbuchung.name);}}",
|
||||
"onClick": "{{closeModal(Platzbuchung.name);\nshowModal(SeatCalendar.name);}}",
|
||||
"parentId": "q44lz1f0e4",
|
||||
"renderMode": "CANVAS",
|
||||
"responsiveBehavior": "hug",
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"animateLoading": true,
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"bottomRow": 465,
|
||||
"bottomRow": 72,
|
||||
"boxShadow": "none",
|
||||
"canEscapeKeyClose": true,
|
||||
"canOutsideClickClose": true,
|
||||
"children": [
|
||||
{
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"bottomRow": 450,
|
||||
"bottomRow": 720,
|
||||
"boxShadow": "{{appsmith.theme.boxShadow.appBoxShadow}}",
|
||||
"canExtend": true,
|
||||
"detachFromLayout": true,
|
||||
@@ -29,7 +29,7 @@
|
||||
"leftColumn": 0,
|
||||
"maxDynamicHeight": 9000,
|
||||
"minDynamicHeight": 4,
|
||||
"minHeight": 478,
|
||||
"minHeight": 720,
|
||||
"minWidth": 450,
|
||||
"mobileBottomRow": 240,
|
||||
"mobileLeftColumn": 0,
|
||||
@@ -58,14 +58,14 @@
|
||||
],
|
||||
"dynamicHeight": "AUTO_HEIGHT",
|
||||
"dynamicTriggerPathList": [],
|
||||
"height": 450,
|
||||
"height": 720,
|
||||
"isCanvas": true,
|
||||
"isLoading": false,
|
||||
"key": "tfld9k9m85",
|
||||
"leftColumn": 19,
|
||||
"maxDynamicHeight": 9000,
|
||||
"minDynamicHeight": 10,
|
||||
"minHeight": 410,
|
||||
"minHeight": 720,
|
||||
"mobileBottomRow": 39,
|
||||
"mobileLeftColumn": 19,
|
||||
"mobileRightColumn": 43,
|
||||
@@ -84,5 +84,5 @@
|
||||
"version": 2,
|
||||
"widgetId": "lywapf93mj",
|
||||
"widgetName": "Platzbuchung",
|
||||
"width": 580
|
||||
"width": 1199.85
|
||||
}
|
||||
+3
-3
@@ -3,7 +3,7 @@
|
||||
"alignWidget": "LEFT",
|
||||
"animateLoading": true,
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"bottomRow": 30,
|
||||
"bottomRow": 46,
|
||||
"defaultCheckedState": false,
|
||||
"dynamicBindingPathList": [
|
||||
{
|
||||
@@ -39,9 +39,9 @@
|
||||
"renderMode": "CANVAS",
|
||||
"responsiveBehavior": "fill",
|
||||
"rightColumn": 45,
|
||||
"topRow": 26,
|
||||
"topRow": 42,
|
||||
"type": "CHECKBOX_WIDGET",
|
||||
"version": 1,
|
||||
"widgetId": "s2wg7tlv6m",
|
||||
"widgetName": "Checkbox1"
|
||||
"widgetName": "RecurringCheckbox"
|
||||
}
|
||||
+4
-4
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"animateLoading": true,
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"bottomRow": 38,
|
||||
"bottomRow": 10,
|
||||
"boxShadow": "none",
|
||||
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
|
||||
"buttonVariant": "PRIMARY",
|
||||
@@ -30,16 +30,16 @@
|
||||
"originalBottomRow": 36,
|
||||
"originalTopRow": 32,
|
||||
"parentColumnSpace": 8.875,
|
||||
"parentId": "q44lz1f0e4",
|
||||
"parentId": "nxgzciev9f",
|
||||
"parentRowSpace": 10,
|
||||
"placement": "CENTER",
|
||||
"recaptchaType": "V3",
|
||||
"renderMode": "CANVAS",
|
||||
"resetFormOnClick": false,
|
||||
"responsiveBehavior": "hug",
|
||||
"rightColumn": 7,
|
||||
"rightColumn": 12,
|
||||
"text": "Mo",
|
||||
"topRow": 34,
|
||||
"topRow": 6,
|
||||
"type": "BUTTON_WIDGET",
|
||||
"version": 1,
|
||||
"widgetId": "94tiejotz5",
|
||||
+5
-5
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"animateLoading": true,
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"bottomRow": 38,
|
||||
"bottomRow": 10,
|
||||
"boxShadow": "none",
|
||||
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
|
||||
"buttonVariant": "PRIMARY",
|
||||
@@ -20,7 +20,7 @@
|
||||
"isLoading": false,
|
||||
"isVisible": true,
|
||||
"key": "on7g9pelq6",
|
||||
"leftColumn": 7,
|
||||
"leftColumn": 12,
|
||||
"minWidth": 120,
|
||||
"mobileBottomRow": 38,
|
||||
"mobileLeftColumn": 2,
|
||||
@@ -30,16 +30,16 @@
|
||||
"originalBottomRow": 36,
|
||||
"originalTopRow": 32,
|
||||
"parentColumnSpace": 8.875,
|
||||
"parentId": "q44lz1f0e4",
|
||||
"parentId": "nxgzciev9f",
|
||||
"parentRowSpace": 10,
|
||||
"placement": "CENTER",
|
||||
"recaptchaType": "V3",
|
||||
"renderMode": "CANVAS",
|
||||
"resetFormOnClick": false,
|
||||
"responsiveBehavior": "hug",
|
||||
"rightColumn": 14,
|
||||
"rightColumn": 24,
|
||||
"text": "Di",
|
||||
"topRow": 34,
|
||||
"topRow": 6,
|
||||
"type": "BUTTON_WIDGET",
|
||||
"version": 1,
|
||||
"widgetId": "ghkjz9swkj",
|
||||
+5
-5
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"animateLoading": true,
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"bottomRow": 38,
|
||||
"bottomRow": 10,
|
||||
"boxShadow": "none",
|
||||
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
|
||||
"buttonVariant": "PRIMARY",
|
||||
@@ -20,7 +20,7 @@
|
||||
"isLoading": false,
|
||||
"isVisible": true,
|
||||
"key": "on7g9pelq6",
|
||||
"leftColumn": 14,
|
||||
"leftColumn": 24,
|
||||
"minWidth": 120,
|
||||
"mobileBottomRow": 38,
|
||||
"mobileLeftColumn": 2,
|
||||
@@ -30,16 +30,16 @@
|
||||
"originalBottomRow": 36,
|
||||
"originalTopRow": 32,
|
||||
"parentColumnSpace": 8.875,
|
||||
"parentId": "q44lz1f0e4",
|
||||
"parentId": "nxgzciev9f",
|
||||
"parentRowSpace": 10,
|
||||
"placement": "CENTER",
|
||||
"recaptchaType": "V3",
|
||||
"renderMode": "CANVAS",
|
||||
"resetFormOnClick": false,
|
||||
"responsiveBehavior": "hug",
|
||||
"rightColumn": 21,
|
||||
"rightColumn": 36,
|
||||
"text": "Mi",
|
||||
"topRow": 34,
|
||||
"topRow": 6,
|
||||
"type": "BUTTON_WIDGET",
|
||||
"version": 1,
|
||||
"widgetId": "26qk30tfsj",
|
||||
+5
-5
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"animateLoading": true,
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"bottomRow": 38,
|
||||
"bottomRow": 10,
|
||||
"boxShadow": "none",
|
||||
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
|
||||
"buttonVariant": "PRIMARY",
|
||||
@@ -20,7 +20,7 @@
|
||||
"isLoading": false,
|
||||
"isVisible": true,
|
||||
"key": "on7g9pelq6",
|
||||
"leftColumn": 21,
|
||||
"leftColumn": 36,
|
||||
"minWidth": 120,
|
||||
"mobileBottomRow": 38,
|
||||
"mobileLeftColumn": 2,
|
||||
@@ -30,16 +30,16 @@
|
||||
"originalBottomRow": 36,
|
||||
"originalTopRow": 32,
|
||||
"parentColumnSpace": 8.875,
|
||||
"parentId": "q44lz1f0e4",
|
||||
"parentId": "nxgzciev9f",
|
||||
"parentRowSpace": 10,
|
||||
"placement": "CENTER",
|
||||
"recaptchaType": "V3",
|
||||
"renderMode": "CANVAS",
|
||||
"resetFormOnClick": false,
|
||||
"responsiveBehavior": "hug",
|
||||
"rightColumn": 28,
|
||||
"rightColumn": 49,
|
||||
"text": "Do",
|
||||
"topRow": 34,
|
||||
"topRow": 6,
|
||||
"type": "BUTTON_WIDGET",
|
||||
"version": 1,
|
||||
"widgetId": "chvxisz1qb",
|
||||
+5
-5
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"animateLoading": true,
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"bottomRow": 38,
|
||||
"bottomRow": 10,
|
||||
"boxShadow": "none",
|
||||
"buttonColor": "{{appsmith.theme.colors.primaryColor}}",
|
||||
"buttonVariant": "PRIMARY",
|
||||
@@ -20,7 +20,7 @@
|
||||
"isLoading": false,
|
||||
"isVisible": true,
|
||||
"key": "on7g9pelq6",
|
||||
"leftColumn": 28,
|
||||
"leftColumn": 49,
|
||||
"minWidth": 120,
|
||||
"mobileBottomRow": 38,
|
||||
"mobileLeftColumn": 2,
|
||||
@@ -30,16 +30,16 @@
|
||||
"originalBottomRow": 36,
|
||||
"originalTopRow": 32,
|
||||
"parentColumnSpace": 8.875,
|
||||
"parentId": "q44lz1f0e4",
|
||||
"parentId": "nxgzciev9f",
|
||||
"parentRowSpace": 10,
|
||||
"placement": "CENTER",
|
||||
"recaptchaType": "V3",
|
||||
"renderMode": "CANVAS",
|
||||
"resetFormOnClick": false,
|
||||
"responsiveBehavior": "hug",
|
||||
"rightColumn": 35,
|
||||
"rightColumn": 61,
|
||||
"text": "Fr",
|
||||
"topRow": 34,
|
||||
"topRow": 6,
|
||||
"type": "BUTTON_WIDGET",
|
||||
"version": 1,
|
||||
"widgetId": "nb3yusumzy",
|
||||
@@ -0,0 +1,100 @@
|
||||
{
|
||||
"animateLoading": true,
|
||||
"backgroundColor": "#FFFFFF",
|
||||
"borderColor": "#E0DEDE",
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"borderWidth": "1",
|
||||
"bottomRow": 60,
|
||||
"boxShadow": "{{appsmith.theme.boxShadow.appBoxShadow}}",
|
||||
"children": [
|
||||
{
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"bottomRow": 120,
|
||||
"boxShadow": "{{appsmith.theme.boxShadow.appBoxShadow}}",
|
||||
"canExtend": false,
|
||||
"containerStyle": "none",
|
||||
"detachFromLayout": true,
|
||||
"dynamicBindingPathList": [
|
||||
{
|
||||
"key": "borderRadius"
|
||||
},
|
||||
{
|
||||
"key": "boxShadow"
|
||||
}
|
||||
],
|
||||
"dynamicHeight": "AUTO_HEIGHT",
|
||||
"flexLayers": [],
|
||||
"isLoading": false,
|
||||
"isVisible": true,
|
||||
"key": "y8l6muyhfx",
|
||||
"leftColumn": 0,
|
||||
"maxDynamicHeight": 9000,
|
||||
"minDynamicHeight": 4,
|
||||
"minHeight": 100,
|
||||
"minWidth": 450,
|
||||
"mobileBottomRow": 100,
|
||||
"mobileLeftColumn": 0,
|
||||
"mobileRightColumn": 445.44374999999997,
|
||||
"mobileTopRow": 0,
|
||||
"needsErrorInfo": false,
|
||||
"parentColumnSpace": 1,
|
||||
"parentId": "iky8iz4l6e",
|
||||
"parentRowSpace": 1,
|
||||
"renderMode": "CANVAS",
|
||||
"responsiveBehavior": "fill",
|
||||
"rightColumn": 445.44374999999997,
|
||||
"topRow": 0,
|
||||
"type": "CANVAS_WIDGET",
|
||||
"version": 1,
|
||||
"widgetId": "nxgzciev9f",
|
||||
"widgetName": "Canvas8"
|
||||
}
|
||||
],
|
||||
"containerStyle": "card",
|
||||
"dynamicBindingPathList": [
|
||||
{
|
||||
"key": "borderRadius"
|
||||
},
|
||||
{
|
||||
"key": "boxShadow"
|
||||
},
|
||||
{
|
||||
"key": "isVisible"
|
||||
}
|
||||
],
|
||||
"dynamicHeight": "AUTO_HEIGHT",
|
||||
"dynamicPropertyPathList": [
|
||||
{
|
||||
"key": "isVisible"
|
||||
}
|
||||
],
|
||||
"dynamicTriggerPathList": [],
|
||||
"flexVerticalAlignment": "stretch",
|
||||
"isCanvas": true,
|
||||
"isLoading": false,
|
||||
"isVisible": "{{ RecurringCheckbox.isChecked }}",
|
||||
"key": "tlqlxo30ex",
|
||||
"leftColumn": 1,
|
||||
"maxDynamicHeight": 9000,
|
||||
"minDynamicHeight": 10,
|
||||
"minWidth": 450,
|
||||
"mobileBottomRow": 68,
|
||||
"mobileLeftColumn": 2,
|
||||
"mobileRightColumn": 26,
|
||||
"mobileTopRow": 58,
|
||||
"needsErrorInfo": false,
|
||||
"originalBottomRow": 60,
|
||||
"originalTopRow": 48,
|
||||
"parentColumnSpace": 18.56015625,
|
||||
"parentId": "q44lz1f0e4",
|
||||
"parentRowSpace": 10,
|
||||
"renderMode": "CANVAS",
|
||||
"responsiveBehavior": "fill",
|
||||
"rightColumn": 38,
|
||||
"shouldScrollContents": true,
|
||||
"topRow": 48,
|
||||
"type": "CONTAINER_WIDGET",
|
||||
"version": 1,
|
||||
"widgetId": "iky8iz4l6e",
|
||||
"widgetName": "RecurringContainer"
|
||||
}
|
||||
+5
-5
@@ -2,7 +2,7 @@
|
||||
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
|
||||
"animateLoading": true,
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"bottomRow": 34,
|
||||
"bottomRow": 4,
|
||||
"boxShadow": "none",
|
||||
"defaultOptionValue": "Woche",
|
||||
"dynamicBindingPathList": [
|
||||
@@ -31,7 +31,7 @@
|
||||
"labelText": "",
|
||||
"labelTextSize": "0.875rem",
|
||||
"labelWidth": 5,
|
||||
"leftColumn": 28,
|
||||
"leftColumn": 29,
|
||||
"maxDynamicHeight": 9000,
|
||||
"minDynamicHeight": 4,
|
||||
"minWidth": 450,
|
||||
@@ -45,15 +45,15 @@
|
||||
"originalBottomRow": 32,
|
||||
"originalTopRow": 28,
|
||||
"parentColumnSpace": 8.875,
|
||||
"parentId": "q44lz1f0e4",
|
||||
"parentId": "nxgzciev9f",
|
||||
"parentRowSpace": 10,
|
||||
"placeholderText": "Woche",
|
||||
"renderMode": "CANVAS",
|
||||
"responsiveBehavior": "fill",
|
||||
"rightColumn": 43,
|
||||
"rightColumn": 44,
|
||||
"serverSideFiltering": false,
|
||||
"sourceData": "[\n {\n \"name\": \"Tag\",\n \"code\": \"Tag\"\n },\n {\n \"name\": \"Woche\",\n \"code\": \"Woche\"\n },\n {\n \"name\": \"Monat\",\n \"code\": \"Monat\"\n }\n]",
|
||||
"topRow": 30,
|
||||
"topRow": 0,
|
||||
"type": "SELECT_WIDGET",
|
||||
"version": 1,
|
||||
"widgetId": "2woyknsibz",
|
||||
+3
-3
@@ -2,7 +2,7 @@
|
||||
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
|
||||
"animateLoading": true,
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"bottomRow": 34,
|
||||
"bottomRow": 4,
|
||||
"boxShadow": "none",
|
||||
"defaultOptionValue": "1",
|
||||
"dynamicBindingPathList": [
|
||||
@@ -45,7 +45,7 @@
|
||||
"originalBottomRow": 32,
|
||||
"originalTopRow": 28,
|
||||
"parentColumnSpace": 8.875,
|
||||
"parentId": "q44lz1f0e4",
|
||||
"parentId": "nxgzciev9f",
|
||||
"parentRowSpace": 10,
|
||||
"placeholderText": "Select option",
|
||||
"renderMode": "CANVAS",
|
||||
@@ -53,7 +53,7 @@
|
||||
"rightColumn": 28,
|
||||
"serverSideFiltering": false,
|
||||
"sourceData": "[\n {\n \"name\": \"1\",\n \"code\": \"1\"\n },\n {\n \"name\": \"2\",\n \"code\": \"2\"\n },\n {\n \"name\": \"3\",\n \"code\": \"3\"\n },\n\t{\n \"name\": \"4\",\n \"code\": \"4\"\n },\n\t{\n \"name\": \"5\",\n \"code\": \"5\"\n },\n\t{\n \"name\": \"6\",\n \"code\": \"6\"\n },\n\t{\n \"name\": \"7\",\n \"code\": \"7\"\n },\n\t{\n \"name\": \"8\",\n \"code\": \"8\"\n },\n\t{\n \"name\": \"9\",\n \"code\": \"9\"\n },\n\t{\n \"name\": \"10\",\n \"code\": \"10\"\n }\n]",
|
||||
"topRow": 30,
|
||||
"topRow": 0,
|
||||
"type": "SELECT_WIDGET",
|
||||
"version": 1,
|
||||
"widgetId": "0cpd4km3ko",
|
||||
@@ -1,59 +0,0 @@
|
||||
{
|
||||
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
|
||||
"animateLoading": true,
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"bottomRow": 18,
|
||||
"boxShadow": "none",
|
||||
"defaultOptionValue": "GREEN",
|
||||
"dynamicBindingPathList": [
|
||||
{
|
||||
"key": "accentColor"
|
||||
},
|
||||
{
|
||||
"key": "borderRadius"
|
||||
}
|
||||
],
|
||||
"dynamicHeight": "FIXED",
|
||||
"dynamicPropertyPathList": [
|
||||
{
|
||||
"key": "sourceData"
|
||||
}
|
||||
],
|
||||
"dynamicTriggerPathList": [],
|
||||
"isDisabled": false,
|
||||
"isFilterable": false,
|
||||
"isLoading": false,
|
||||
"isRequired": false,
|
||||
"isVisible": true,
|
||||
"key": "f8k90o33yd",
|
||||
"labelAlignment": "left",
|
||||
"labelPosition": "Top",
|
||||
"labelText": "Label",
|
||||
"labelTextSize": "0.875rem",
|
||||
"labelWidth": 5,
|
||||
"leftColumn": 25,
|
||||
"maxDynamicHeight": 9000,
|
||||
"minDynamicHeight": 4,
|
||||
"minWidth": 450,
|
||||
"mobileBottomRow": 15,
|
||||
"mobileLeftColumn": 22,
|
||||
"mobileRightColumn": 42,
|
||||
"mobileTopRow": 8,
|
||||
"needsErrorInfo": false,
|
||||
"optionLabel": "code",
|
||||
"optionValue": "value",
|
||||
"parentColumnSpace": 8.875,
|
||||
"parentId": "q44lz1f0e4",
|
||||
"parentRowSpace": 10,
|
||||
"placeholderText": "Select option",
|
||||
"renderMode": "CANVAS",
|
||||
"responsiveBehavior": "fill",
|
||||
"rightColumn": 39,
|
||||
"serverSideFiltering": false,
|
||||
"sourceData": "[\n { \"value\": \"00:00\", \"code\": \"00:00\" },\n { \"value\": \"00:30\", \"code\": \"00:30\" },\n { \"value\": \"01:00\", \"code\": \"01:00\" },\n { \"value\": \"01:30\", \"code\": \"01:30\" },\n { \"value\": \"02:00\", \"code\": \"02:00\" },\n { \"value\": \"02:30\", \"code\": \"02:30\" },\n { \"value\": \"03:00\", \"code\": \"03:00\" },\n { \"value\": \"03:30\", \"code\": \"03:30\" },\n { \"value\": \"04:00\", \"code\": \"04:00\" },\n { \"value\": \"04:30\", \"code\": \"04:30\" },\n { \"value\": \"05:00\", \"code\": \"05:00\" },\n { \"value\": \"05:30\", \"code\": \"05:30\" },\n { \"value\": \"06:00\", \"code\": \"06:00\" },\n { \"value\": \"06:30\", \"code\": \"06:30\" },\n { \"value\": \"07:00\", \"code\": \"07:00\" },\n { \"value\": \"07:30\", \"code\": \"07:30\" },\n { \"value\": \"08:00\", \"code\": \"08:00\" },\n { \"value\": \"08:30\", \"code\": \"08:30\" },\n { \"value\": \"09:00\", \"code\": \"09:00\" },\n { \"value\": \"09:30\", \"code\": \"09:30\" },\n { \"value\": \"10:00\", \"code\": \"10:00\" },\n { \"value\": \"10:30\", \"code\": \"10:30\" },\n { \"value\": \"11:00\", \"code\": \"11:00\" },\n { \"value\": \"11:30\", \"code\": \"11:30\" },\n { \"value\": \"12:00\", \"code\": \"12:00\" },\n { \"value\": \"12:30\", \"code\": \"12:30\" },\n { \"value\": \"13:00\", \"code\": \"13:00\" },\n { \"value\": \"13:30\", \"code\": \"13:30\" },\n { \"value\": \"14:00\", \"code\": \"14:00\" },\n { \"value\": \"14:30\", \"code\": \"14:30\" },\n { \"value\": \"15:00\", \"code\": \"15:00\" },\n { \"value\": \"15:30\", \"code\": \"15:30\" },\n { \"value\": \"16:00\", \"code\": \"16:00\" },\n { \"value\": \"16:30\", \"code\": \"16:30\" },\n { \"value\": \"17:00\", \"code\": \"17:00\" },\n { \"value\": \"17:30\", \"code\": \"17:30\" },\n { \"value\": \"18:00\", \"code\": \"18:00\" },\n { \"value\": \"18:30\", \"code\": \"18:30\" },\n { \"value\": \"19:00\", \"code\": \"19:00\" },\n { \"value\": \"19:30\", \"code\": \"19:30\" },\n { \"value\": \"20:00\", \"code\": \"20:00\" },\n { \"value\": \"20:30\", \"code\": \"20:30\" },\n { \"value\": \"21:00\", \"code\": \"21:00\" },\n { \"value\": \"21:30\", \"code\": \"21:30\" },\n { \"value\": \"22:00\", \"code\": \"22:00\" },\n { \"value\": \"22:30\", \"code\": \"22:30\" },\n { \"value\": \"23:00\", \"code\": \"23:00\" },\n { \"value\": \"23:30\", \"code\": \"23:30\" }\n]",
|
||||
"topRow": 11,
|
||||
"type": "SELECT_WIDGET",
|
||||
"version": 1,
|
||||
"widgetId": "u53n2l4s54",
|
||||
"widgetName": "Select3"
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
{
|
||||
"accentColor": "{{appsmith.theme.colors.primaryColor}}",
|
||||
"animateLoading": true,
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"bottomRow": 18,
|
||||
"boxShadow": "none",
|
||||
"defaultOptionValue": "GREEN",
|
||||
"dynamicBindingPathList": [
|
||||
{
|
||||
"key": "accentColor"
|
||||
},
|
||||
{
|
||||
"key": "borderRadius"
|
||||
}
|
||||
],
|
||||
"dynamicHeight": "FIXED",
|
||||
"dynamicPropertyPathList": [
|
||||
{
|
||||
"key": "sourceData"
|
||||
}
|
||||
],
|
||||
"dynamicTriggerPathList": [],
|
||||
"isDisabled": false,
|
||||
"isFilterable": false,
|
||||
"isLoading": false,
|
||||
"isRequired": false,
|
||||
"isVisible": true,
|
||||
"key": "f8k90o33yd",
|
||||
"labelAlignment": "left",
|
||||
"labelPosition": "Top",
|
||||
"labelText": "Label",
|
||||
"labelTextSize": "0.875rem",
|
||||
"labelWidth": 5,
|
||||
"leftColumn": 39,
|
||||
"maxDynamicHeight": 9000,
|
||||
"minDynamicHeight": 4,
|
||||
"minWidth": 450,
|
||||
"mobileBottomRow": 15,
|
||||
"mobileLeftColumn": 22,
|
||||
"mobileRightColumn": 42,
|
||||
"mobileTopRow": 8,
|
||||
"needsErrorInfo": false,
|
||||
"optionLabel": "code",
|
||||
"optionValue": "value",
|
||||
"parentColumnSpace": 8.875,
|
||||
"parentId": "q44lz1f0e4",
|
||||
"parentRowSpace": 10,
|
||||
"placeholderText": "Select option",
|
||||
"renderMode": "CANVAS",
|
||||
"responsiveBehavior": "fill",
|
||||
"rightColumn": 53,
|
||||
"serverSideFiltering": false,
|
||||
"sourceData": "[\n { \"value\": \"00:00\", \"code\": \"00:00\" },\n { \"value\": \"00:30\", \"code\": \"00:30\" },\n { \"value\": \"01:00\", \"code\": \"01:00\" },\n { \"value\": \"01:30\", \"code\": \"01:30\" },\n { \"value\": \"02:00\", \"code\": \"02:00\" },\n { \"value\": \"02:30\", \"code\": \"02:30\" },\n { \"value\": \"03:00\", \"code\": \"03:00\" },\n { \"value\": \"03:30\", \"code\": \"03:30\" },\n { \"value\": \"04:00\", \"code\": \"04:00\" },\n { \"value\": \"04:30\", \"code\": \"04:30\" },\n { \"value\": \"05:00\", \"code\": \"05:00\" },\n { \"value\": \"05:30\", \"code\": \"05:30\" },\n { \"value\": \"06:00\", \"code\": \"06:00\" },\n { \"value\": \"06:30\", \"code\": \"06:30\" },\n { \"value\": \"07:00\", \"code\": \"07:00\" },\n { \"value\": \"07:30\", \"code\": \"07:30\" },\n { \"value\": \"08:00\", \"code\": \"08:00\" },\n { \"value\": \"08:30\", \"code\": \"08:30\" },\n { \"value\": \"09:00\", \"code\": \"09:00\" },\n { \"value\": \"09:30\", \"code\": \"09:30\" },\n { \"value\": \"10:00\", \"code\": \"10:00\" },\n { \"value\": \"10:30\", \"code\": \"10:30\" },\n { \"value\": \"11:00\", \"code\": \"11:00\" },\n { \"value\": \"11:30\", \"code\": \"11:30\" },\n { \"value\": \"12:00\", \"code\": \"12:00\" },\n { \"value\": \"12:30\", \"code\": \"12:30\" },\n { \"value\": \"13:00\", \"code\": \"13:00\" },\n { \"value\": \"13:30\", \"code\": \"13:30\" },\n { \"value\": \"14:00\", \"code\": \"14:00\" },\n { \"value\": \"14:30\", \"code\": \"14:30\" },\n { \"value\": \"15:00\", \"code\": \"15:00\" },\n { \"value\": \"15:30\", \"code\": \"15:30\" },\n { \"value\": \"16:00\", \"code\": \"16:00\" },\n { \"value\": \"16:30\", \"code\": \"16:30\" },\n { \"value\": \"17:00\", \"code\": \"17:00\" },\n { \"value\": \"17:30\", \"code\": \"17:30\" },\n { \"value\": \"18:00\", \"code\": \"18:00\" },\n { \"value\": \"18:30\", \"code\": \"18:30\" },\n { \"value\": \"19:00\", \"code\": \"19:00\" },\n { \"value\": \"19:30\", \"code\": \"19:30\" },\n { \"value\": \"20:00\", \"code\": \"20:00\" },\n { \"value\": \"20:30\", \"code\": \"20:30\" },\n { \"value\": \"21:00\", \"code\": \"21:00\" },\n { \"value\": \"21:30\", \"code\": \"21:30\" },\n { \"value\": \"22:00\", \"code\": \"22:00\" },\n { \"value\": \"22:30\", \"code\": \"22:30\" },\n { \"value\": \"23:00\", \"code\": \"23:00\" },\n { \"value\": \"23:30\", \"code\": \"23:30\" }\n]",
|
||||
"topRow": 11,
|
||||
"type": "SELECT_WIDGET",
|
||||
"version": 1,
|
||||
"widgetId": "ffcw6h9yvt",
|
||||
"widgetName": "Select3Copy"
|
||||
}
|
||||
@@ -36,7 +36,7 @@
|
||||
"responsiveBehavior": "fill",
|
||||
"rightColumn": 41,
|
||||
"shouldTruncate": false,
|
||||
"text": "Neue Temrinbuchung",
|
||||
"text": "Neue Terminbuchung",
|
||||
"textAlign": "LEFT",
|
||||
"textColor": "#231F20",
|
||||
"topRow": 1,
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
{
|
||||
"backgroundColor": "#FFFFFF",
|
||||
"bookingSelected": "{{ BookingSelect.openBookingWidget() }}",
|
||||
"borderColor": "#E0DEDE",
|
||||
"borderRadius": "{{appsmith.theme.borderRadius.appBorderRadius}}",
|
||||
"borderWidth": "1",
|
||||
"bottomRow": 69,
|
||||
"boxShadow": "{{appsmith.theme.boxShadow.appBoxShadow}}",
|
||||
"defaultModel": "{{\n {\n events: GetBookings.data || [],\n seatId: appsmith.store.selectedSeatId,\n seatName: appsmith.store.selectedSeatName\n }\n}}",
|
||||
"defaultModel": "{{\n {\n seatId:\n appsmith.store.selectedSeatId || \"\",\n\n seatName:\n appsmith.store.selectedSeatName || \"\",\n\n events:\n GetSeatBookings.data || []\n }\n}}",
|
||||
"dynamicBindingPathList": [
|
||||
{
|
||||
"key": "theme"
|
||||
@@ -24,15 +25,26 @@
|
||||
"dynamicPropertyPathList": [
|
||||
{
|
||||
"key": "seatSelected"
|
||||
},
|
||||
{
|
||||
"key": "bookingSelected"
|
||||
}
|
||||
],
|
||||
"dynamicTriggerPathList": [
|
||||
{
|
||||
"key": "seatSelected"
|
||||
},
|
||||
{
|
||||
"key": "bookingSelected"
|
||||
},
|
||||
{
|
||||
"key": "timeSelected"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
"seatSelected"
|
||||
"seatSelected",
|
||||
"bookingSelected",
|
||||
"timeSelected"
|
||||
],
|
||||
"isCanvas": false,
|
||||
"isLoading": false,
|
||||
@@ -51,20 +63,21 @@
|
||||
"parentId": "ekq4ry46pv",
|
||||
"parentRowSpace": 10,
|
||||
"renderMode": "CANVAS",
|
||||
"rightColumn": 63,
|
||||
"seatSelected": "{{\n storeValue(\n \"selectedSeatId\",\n Custom4.model.selectedSeat.id\n )\n .then(() =>\n storeValue(\n \"selectedSeatName\",\n Custom4.model.selectedSeat.name\n )\n )\n .then(() => GetBookings.run())\n .then(() => showModal(SeatCalendar.name))\n}}",
|
||||
"rightColumn": 64,
|
||||
"seatSelected": "{{\n storeValue(\n \"selectedSeatId\",\n Custom4.model.selectedSeat.id\n )\n .then(() =>\n storeValue(\n \"selectedSeatName\",\n Custom4.model.selectedSeat.name\n )\n )\n .then(() => CreateBooking.run())\n .then(() => showModal(SeatCalendar.name))\n}}",
|
||||
"srcDoc": {
|
||||
"css": "@charset \"UTF-8\";\nhtml,\nbody {\n margin: 0;\n padding: 0;\n width: 100%;\n min-height: 100%;\n font-family: Arial, sans-serif;\n overflow: hidden;\n}\n\n/* Äußerer Custom-Widget-Bereich */\n#calendarWrapper {\n width: 100%;\n min-height: 0;\n box-sizing: border-box;\n padding: 10px;\n background: #ffffff;\n overflow: visible;\n}\n\n/* Kopfbereich */\n#calendarHeader {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 10px;\n padding: 8px 10px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n background: #f9fafb;\n}\n\n#calendarSeatTitle {\n font-size: 15px;\n font-weight: 600;\n color: #374151;\n}\n\n/* Kalender */\n#calendar {\n width: 100%;\n min-height: 0;\n box-sizing: border-box;\n --calendar-selection-color: rgba(\n 11,\n 116,\n 222,\n 0.12\n );\n --fc-highlight-color: rgba(\n 11,\n 116,\n 222,\n 0.12\n );\n --fc-today-bg-color: transparent;\n}\n\n/* Auswahltext */\n#calendarSelection {\n margin-top: 10px;\n padding: 8px 10px;\n border: 1px solid #d1d5db;\n border-radius: 5px;\n background: #f9fafb;\n color: #374151;\n font-size: 13px;\n}\n\n/* FullCalendar-Grundformatierung */\n#calendar .fc {\n width: 100%;\n font-size: 13px;\n --fc-highlight-color: rgba(\n 11,\n 116,\n 222,\n 0.12\n );\n --fc-today-bg-color: transparent;\n}\n\n#calendar .fc .fc-button {\n background: #374151;\n border-color: #374151;\n}\n\n#calendar .fc .fc-button:hover,\n#calendar .fc .fc-button-active {\n background: #111827;\n border-color: #111827;\n}\n\n#calendar .fc .fc-event {\n cursor: pointer;\n}\n\n/*\n * EINHEITLICHE AUSWAHLFARBE\n *\n * Gilt für:\n * - einen Tag\n * - mehrere Tage\n * - einen Timeslot\n *\n * Wichtig: FullCalendar verwendet background.\n */\n#calendar .fc .fc-highlight,\n#calendar .fc .fc-highlight-skeleton,\n#calendar .fc .fc-highlight-skeleton td,\n#calendar .fc .fc-highlight-container,\n#calendar .fc .fc-highlight-container td {\n background: var(--calendar-selection-color) !important;\n background-color: var(--calendar-selection-color) !important;\n opacity: 1 !important;\n border: 0 !important;\n box-shadow: none !important;\n}\n\n/*\n * Tagesansicht:\n * mögliche Auswahlcontainer ebenfalls\n * auf dieselbe Farbe setzen.\n */\n#calendar .fc-timegrid .fc-timegrid-col-bg,\n#calendar .fc-timegrid .fc-timegrid-col-bg-container,\n#calendar .fc-timegrid .fc-timegrid-col-bg-container table,\n#calendar .fc-timegrid .fc-timegrid-col-bg-container td,\n#calendar .fc-timegrid .fc-highlight-skeleton,\n#calendar .fc-timegrid .fc-highlight-container {\n background: transparent !important;\n background-color: transparent !important;\n}\n\n/*\n * Die tatsächliche Auswahlfläche\n * in der Tagesansicht.\n */\n#calendar .fc-timegrid .fc-highlight,\n#calendar .fc-timegrid .fc-highlight-skeleton td,\n#calendar .fc-timegrid .fc-highlight-container td {\n background: var(--calendar-selection-color) !important;\n background-color: var(--calendar-selection-color) !important;\n opacity: 1 !important;\n border: 0 !important;\n box-shadow: none !important;\n}\n\n/*\n * Aktueller Tag in der Monatsansicht:\n * transparenter Hintergrund,\n * nur schmaler roter Rahmen.\n */\n#calendar .fc-daygrid-day.fc-day-today {\n background: transparent !important;\n background-color: transparent !important;\n box-shadow: inset 0 0 0 1px #dc2626 !important;\n}\n\n#calendar .fc-daygrid-day.fc-day-today .fc-daygrid-day-frame {\n background: transparent !important;\n background-color: transparent !important;\n box-shadow: none !important;\n}\n\n/*\n * Kopfzelle des aktuellen Tages\n * ohne Hintergrund und ohne Rahmen.\n */\n#calendar .fc-col-header-cell.fc-day-today {\n background: transparent !important;\n background-color: transparent !important;\n box-shadow: none !important;\n}\n\n/*\n * Tagesansicht:\n * aktueller Tag ohne Hintergrund\n * und ohne roten Rahmen.\n */\n#calendar .fc-timegrid-col.fc-day-today {\n background: transparent !important;\n background-color: transparent !important;\n box-shadow: none !important;\n border: none !important;\n}\n\n#calendar .fc-timegrid-col.fc-day-today .fc-timegrid-col-frame {\n background: transparent !important;\n background-color: transparent !important;\n box-shadow: none !important;\n border: none !important;\n}\n\n/* Wochenenden grau */\n#calendar td.fc-day-sat,\n#calendar td.fc-day-sun,\n#calendar .fc-timegrid-col.fc-day-sat,\n#calendar .fc-timegrid-col.fc-day-sun {\n background-color: #eeeeee !important;\n}\n\n/* Wochenend-Kopfzellen */\n#calendar .fc-col-header-cell.fc-day-sat,\n#calendar .fc-col-header-cell.fc-day-sun {\n background-color: #d6d6d6 !important;\n}\n\n/*\n * Monatsansicht:\n * kein Scrollen innerhalb des Monats.\n */\n#calendar .fc-daygrid .fc-scroller {\n height: auto !important;\n max-height: none !important;\n overflow-y: visible !important;\n overflow-x: visible !important;\n}\nLine truncated
|
||||
"html": "<div id=\"calendarWrapper\">\n <div id=\"calendarHeader\">\n <div id=\"calendarSeatTitle\">\n Kalender\n </div>\n </div>\n\n <div id=\"calendar\"></div>\n\n <div id=\"calendarSelection\">\n Keine Auswahl\n </div>\n</div>\n\n<link\n rel=\"stylesheet\"\n href=\"https://cdn.jsdelivr.net/npm/[email protected]/index.global.min.css\"\n>\n\n<script\n src=\"https://cdn.jsdelivr.net/npm/[email protected]/index.global.min.js\">\n</script>",
|
||||
"js": "let calendar = null;\nlet resizeTimer = null;\nconst MONTH_HEIGHT = 620;\nconst MONTH_CONTENT_HEIGHT = 550;\nconst DAY_HEIGHT = 600;\nconst DAY_CONTENT_HEIGHT = 480;\nconst BUSINESS_START_MINUTES = 7 * 60;\nconst BUSINESS_END_MINUTES = 18 * 60;\nconst SLOT_MINUTES = 30;\nfunction getModel() {\n const model = appsmith.model || {};\n if (typeof model === \"string\") {\n try {\n return JSON.parse(model);\n } catch (error) {\n return {};\n }\n }\n return model;\n}\nfunction getEvents() {\n const model = getModel();\n return Array.isArray(model.events) ? model.events : [];\n}\nfunction getSeatName() {\n const model = getModel();\n return model.seatName || model.seatId || \"Kein Platz ausgewählt\";\n}\nfunction updateSeatTitle() {\n const element = document.getElementById(\"calendarSeatTitle\");\n if (!element) {\n return;\n }\n element.textContent = `Kalender für ${getSeatName()}`;\n}\nfunction updateSelectionText(text) {\n const element = document.getElementById(\"calendarSelection\");\n if (!element) {\n return;\n }\n const isDayView = calendar && calendar.view && calendar.view.type === \"timeGridDay\";\n if (isDayView) {\n element.textContent = \"\";\n element.style.display = \"none\";\n return;\n }\n element.style.display = \"block\";\n element.textContent = text;\n}\nfunction updateCalendarViewSettings(viewType) {\n if (!calendar) {\n return;\n }\n const isDayView = viewType === \"timeGridDay\";\n calendar.setOption(\"height\", isDayView ? DAY_HEIGHT : MONTH_HEIGHT);\n calendar.setOption(\"contentHeight\", isDayView ? DAY_CONTENT_HEIGHT : MONTH_CONTENT_HEIGHT);\n calendar.setOption(\"expandRows\", !isDayView);\n if (typeof calendar.updateSize === \"function\") {\n calendar.updateSize();\n }\n}\nfunction scheduleResize() {\n window.clearTimeout(resizeTimer);\n resizeTimer = window.setTimeout(() => {\n if (calendar) {\n calendar.updateSize();\n }\n }, 250);\n}\nfunction isWeekend(date) {\n const day = date.getDay();\n return day === 0 || day === 6;\n}\nfunction isBusinessDay(date) {\n const day = date.getDay();\n return day >= 1 && day <= 5;\n}\nfunction getMinutesOfDay(date) {\n return date.getHours() * 60 + date.getMinutes();\n}\nfunction isBusinessTimeRange(start, end) {\n if (!start || !end) {\n return false;\n }\n if (!isBusinessDay(start)) {\n return false;\n }\n if (start.toDateString() !== end.toDateString()) {\n return false;\n }\n const startMinutes = getMinutesOfDay(start);\n const endMinutes = getMinutesOfDay(end);\n return startMinutes >= BUSINESS_START_MINUTES && endMinutes <= BUSINESS_END_MINUTES && endMinutes > startMinutes;\n}\nfunction isBusinessDayRange(start, end) {\n if (!start || !end) {\n return false;\n }\n const lastSelectedDay = new Date(end.getTime() - 1);\n const current = new Date(start);\n current.setHours(12, 0, 0, 0);\n lastSelectedDay.setHours(12, 0, 0, 0);\n while (current <= lastSelectedDay) {\n if (!isBusinessDay(current)) {\n return false;\n }\n current.setDate(current.getDate() + 1);\n }\n return true;\n}\nfunction showWeekendMessage() {\n updateSelectionText(\"Samstag und Sonntag sind nicht buchbar.\");\n}\nfunction showBusinessHoursMessage() {\n updateSelectionText(\"Reservierungen sind Montag bis Freitag von 07:00 bis 18:00 Uhr möglich.\");\n}\nfunction openDayView(date) {\n if (!calendar) {\n return;\n }\n if (isWeekend(date)) {\n showWeekendMessage();\n return;\n }\n calendar.changeView(\"timeGridDay\", date);\n}\nfunction isDayNumberClick(info) {\n const target = info.jsEvent && info.jsEvent.target;\n if (!target || typeof target.closest !== \"function\") {\n return false;\n }\n return Boolean(target.closest(\".fc-daygrid-day-number\"));\n}\nfunction roundToHalfHour(date) {\n const result = new Date(date);\n const minutes = result.getMinutes();\n result.setSeconds(0, 0);\n result.setMinutes(minutes < 30 ? 0 : 30);\n return result;\n}\nfunction pad(value) {\n return String(value).padStart(2, \"0\");\n}\n\n/*\n * Lokales Datum ohne UTC-Verschiebung.\n * Beispiel: 17.08.2026\n */\nfunction formatLocalDate(date) {\n return [date.getFullYear(), pad(date.getMonth() + 1), pad(date.getDate())].join(\"-\");\n}\n\n/*\n * Lokale Uhrzeit ohne UTC-Verschiebung.\n * Beispiel: 09:00:00\n */\nfunction formatLocalTime(date) {\n return [pad(date.getHours()), pad(date.getMinutes()), pad(date.getSeconds())].join(\":\");\n}\n\n/*\n * Lokaler ISO-ähnlicher Wert ohne Z.\n * Beispiel: 2026-08-17T09:00:00\n *\n * Wichtig:\n * Nicht toISOString() verwenden.\n */\nfunction formatLocalDateTime(date) {\n return `${formatLocalDate(date)}T` + `${formatLocalTime(date)}`;\n}\nfunction formatDateTime(date) {\n if (!date) {\n return \"\";\n }\n return new Intl.DateTimeFormat(\"de-DE\", {\n dateStyle: \"short\",\n timeStyle: \"short\"\n }).format(date);\n}\nfunction saveCalendarSelection(type, start, end) {\n coLine truncated
|
||||
"js": "let calendar = null;\nlet resizeTimer = null;\nlet modelChangeRegistered = false;\nlet resizeRegistered = false;\nconst MONTH_HEIGHT = 620;\nconst MONTH_CONTENT_HEIGHT = 550;\nconst DAY_HEIGHT = 600;\nconst DAY_CONTENT_HEIGHT = 480;\nconst BUSINESS_START_MINUTES = 7 * 60;\nconst BUSINESS_END_MINUTES = 18 * 60;\nconst SLOT_MINUTES = 30;\nfunction getModel() {\n const model = appsmith.model || {};\n if (typeof model === \"string\") {\n try {\n return JSON.parse(model);\n } catch (error) {\n return {};\n }\n }\n return model;\n}\nfunction getEvents() {\n const model = getModel();\n return Array.isArray(model.events) ? model.events : [];\n}\nfunction getSeatName() {\n const model = getModel();\n return model.seatName || model.seatId || \"Kein Platz ausgewählt\";\n}\nfunction updateSeatTitle() {\n const element = document.getElementById(\"calendarSeatTitle\");\n if (!element) {\n return;\n }\n element.textContent = `Kalender für ${getSeatName()}`;\n}\nfunction isDayView() {\n return Boolean(calendar && calendar.view && calendar.view.type === \"timeGridDay\");\n}\nfunction updateSelectionText(text) {\n const element = document.getElementById(\"calendarSelection\");\n if (!element) {\n return;\n }\n if (isDayView()) {\n element.textContent = \"\";\n element.style.display = \"none\";\n return;\n }\n element.style.display = \"block\";\n element.textContent = text;\n}\nfunction updateCalendarViewSettings(viewType) {\n if (!calendar) {\n return;\n }\n const dayView = viewType === \"timeGridDay\";\n calendar.setOption(\"height\", dayView ? DAY_HEIGHT : MONTH_HEIGHT);\n calendar.setOption(\"contentHeight\", dayView ? DAY_CONTENT_HEIGHT : MONTH_CONTENT_HEIGHT);\n calendar.setOption(\"expandRows\", !dayView);\n if (typeof calendar.updateSize === \"function\") {\n calendar.updateSize();\n }\n}\nfunction scheduleResize() {\n window.clearTimeout(resizeTimer);\n resizeTimer = window.setTimeout(() => {\n if (calendar) {\n calendar.updateSize();\n }\n }, 250);\n}\nfunction isWeekend(date) {\n const day = date.getDay();\n return day === 0 || day === 6;\n}\nfunction isBusinessDay(date) {\n const day = date.getDay();\n return day >= 1 && day <= 5;\n}\nfunction getMinutesOfDay(date) {\n return date.getHours() * 60 + date.getMinutes();\n}\nfunction isBusinessTimeRange(start, end) {\n if (!start || !end) {\n return false;\n }\n if (!isBusinessDay(start)) {\n return false;\n }\n if (start.toDateString() !== end.toDateString()) {\n return false;\n }\n const startMinutes = getMinutesOfDay(start);\n const endMinutes = getMinutesOfDay(end);\n return startMinutes >= BUSINESS_START_MINUTES && endMinutes <= BUSINESS_END_MINUTES && endMinutes > startMinutes;\n}\nfunction isBusinessDayRange(start, end) {\n if (!start || !end || end <= start) {\n return false;\n }\n const lastSelectedDay = new Date(end.getTime() - 1);\n const current = new Date(start);\n current.setHours(12, 0, 0, 0);\n lastSelectedDay.setHours(12, 0, 0, 0);\n while (current <= lastSelectedDay) {\n if (!isBusinessDay(current)) {\n return false;\n }\n current.setDate(current.getDate() + 1);\n }\n return true;\n}\nfunction showWeekendMessage() {\n updateSelectionText(\"Samstag und Sonntag sind nicht buchbar.\");\n}\nfunction showBusinessHoursMessage() {\n updateSelectionText(\"Reservierungen sind Montag bis Freitag von 07:00 bis 18:00 Uhr möglich.\");\n}\nfunction openDayView(date) {\n if (!calendar) {\n return;\n }\n if (isWeekend(date)) {\n showWeekendMessage();\n return;\n }\n calendar.changeView(\"timeGridDay\", date);\n}\nfunction isDayNumberClick(info) {\n const target = info.jsEvent && info.jsEvent.target;\n if (!target || typeof target.closest !== \"function\") {\n return false;\n }\n return Boolean(target.closest(\".fc-daygrid-day-number\"));\n}\nfunction roundToHalfHour(date) {\n const result = new Date(date);\n const minutes = result.getMinutes();\n result.setSeconds(0, 0);\n result.setMinutes(minutes < 30 ? 0 : 30);\n return result;\n}\nfunction pad(value) {\n return String(value).padStart(2, \"0\");\n}\nfunction formatLocalDate(date) {\n return [date.getFullYear(), pad(date.getMonth() + 1), pad(date.getDate())].join(\"-\");\n}\nfunction formatLocalTime(date) {\n return [pad(date.getHours()), pad(date.getMinutes()), pad(date.getSeconds())].join(\":\");\n}\nfunction formatLocalDateTime(date) {\n return `${formatLocalDate(date)}T${formatLocalTime(date)}`;\n}\nfunction formatDateTime(date) {\n if (!date) {\n return \"\";\n }\n return new Intl.DateTimeFormat(\"de-DE\", {\n dateStyle: \"short\",\n timeStyle: \"short\"\n }).format(date);\n}\nfunction triggerAppsmithEvent(eventName) {\n try {\n appsmith.triggerEvent(eventName);\n } catch (error) {\n console.warn(`Event ${eventName} ist nicht konfiguriert.`, error);\n }\n}\nfunction saveCalendarSelection(type, start, end) {\n ifLine truncated
|
||||
},
|
||||
"theme": "{{appsmith.theme}}",
|
||||
"timeSelected": "{{showModal(Platzbuchung.name);}}",
|
||||
"topRow": 0,
|
||||
"type": "CUSTOM_WIDGET",
|
||||
"uncompiledSrcDoc": {
|
||||
"css": "html,\nbody {\n margin: 0;\n padding: 0;\n width: 100%;\n min-height: 100%;\n font-family: Arial, sans-serif;\n overflow: hidden;\n}\n\n/* Äußerer Custom-Widget-Bereich */\n\n#calendarWrapper {\n width: 100%;\n min-height: 0;\n box-sizing: border-box;\n padding: 10px;\n background: #ffffff;\n overflow: visible;\n}\n\n/* Kopfbereich */\n\n#calendarHeader {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 10px;\n padding: 8px 10px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n background: #f9fafb;\n}\n\n#calendarSeatTitle {\n font-size: 15px;\n font-weight: 600;\n color: #374151;\n}\n\n/* Kalender */\n\n#calendar {\n width: 100%;\n min-height: 0;\n box-sizing: border-box;\n\n --calendar-selection-color: rgba(\n 11,\n 116,\n 222,\n 0.12\n );\n\n --fc-highlight-color: rgba(\n 11,\n 116,\n 222,\n 0.12\n );\n\n --fc-today-bg-color: transparent;\n}\n\n/* Auswahltext */\n\n#calendarSelection {\n margin-top: 10px;\n padding: 8px 10px;\n border: 1px solid #d1d5db;\n border-radius: 5px;\n background: #f9fafb;\n color: #374151;\n font-size: 13px;\n}\n\n/* FullCalendar-Grundformatierung */\n\n#calendar .fc {\n width: 100%;\n font-size: 13px;\n\n --fc-highlight-color: rgba(\n 11,\n 116,\n 222,\n 0.12\n );\n\n --fc-today-bg-color: transparent;\n}\n\n#calendar .fc .fc-button {\n background: #374151;\n border-color: #374151;\n}\n\n#calendar .fc .fc-button:hover,\n#calendar .fc .fc-button-active {\n background: #111827;\n border-color: #111827;\n}\n\n#calendar .fc .fc-event {\n cursor: pointer;\n}\n\n/*\n * EINHEITLICHE AUSWAHLFARBE\n *\n * Gilt für:\n * - einen Tag\n * - mehrere Tage\n * - einen Timeslot\n *\n * Wichtig: FullCalendar verwendet background.\n */\n#calendar .fc .fc-highlight,\n#calendar .fc .fc-highlight-skeleton,\n#calendar .fc .fc-highlight-skeleton td,\n#calendar .fc .fc-highlight-container,\n#calendar .fc .fc-highlight-container td {\n background: var(\n --calendar-selection-color\n ) !important;\n\n background-color: var(\n --calendar-selection-color\n ) !important;\n\n opacity: 1 !important;\n border: 0 !important;\n box-shadow: none !important;\n}\n\n/*\n * Tagesansicht:\n * mögliche Auswahlcontainer ebenfalls\n * auf dieselbe Farbe setzen.\n */\n#calendar .fc-timegrid .fc-timegrid-col-bg,\n#calendar .fc-timegrid .fc-timegrid-col-bg-container,\n#calendar .fc-timegrid .fc-timegrid-col-bg-container table,\n#calendar .fc-timegrid .fc-timegrid-col-bg-container td,\n#calendar .fc-timegrid .fc-highlight-skeleton,\n#calendar .fc-timegrid .fc-highlight-container {\n background: transparent !important;\n background-color: transparent !important;\n}\n\n/*\n * Die tatsächliche Auswahlfläche\n * in der Tagesansicht.\n */\n#calendar .fc-timegrid .fc-highlight,\n#calendar .fc-timegrid .fc-highlight-skeleton td,\n#calendar .fc-timegrid .fc-highlight-container td {\n background: var(\n --calendar-selection-color\n ) !important;\n\n background-color: var(\n --calendar-selection-color\n ) !important;\n\n opacity: 1 !important;\n border: 0 !important;\n box-shadow: none !important;\n}\n\n/*\n * Aktueller Tag in der Monatsansicht:\n * transparenter Hintergrund,\n * nur schmaler roter Rahmen.\n */\n#calendar .fc-daygrid-day.fc-day-today {\n background: transparent !important;\n background-color: transparent !important;\n box-shadow: inset 0 0 0 1px #dc2626 !important;\n}\n\n#calendar\n .fc-daygrid-day.fc-day-today\n .fc-daygrid-day-frame {\n background: transparent !important;\n background-color: transparent !important;\n box-shadow: none !important;\n}\n\n/*\n * Kopfzelle des aktuellen Tages\n * ohne Hintergrund und ohne Rahmen.\n */\n#calendar .fc-col-header-cell.fc-day-today {\n background: transparent !important;\n background-color: transparent !important;\n box-shadow: none !important;\n}\n\n/*\n * Tagesansicht:\n * aktueller Tag ohne Hintergrund\n * und ohne roten Rahmen.\n */\n#calendar .fc-timegrid-col.fc-day-today {\n background: transparent !important;\n background-color: transparent !important;\n box-shadow: none !important;\n border: none !important;\n}\n\n#calendar\n .fc-timegrid-col.fc-day-today\n .fc-timegrid-col-frame {\n background: transparent !important;\n background-color: transparent !important;\n box-shadow: none !important;\n border: none !important;\n}\n\n/* Wochenenden grau */\n\n#calendar td.fc-day-sat,\n#calendar td.fc-day-sun,\n#calendar .fc-timegrid-col.fc-day-sat,\n#calendar .fc-timegrid-col.fc-day-sun {\n background-color: #eeeeee !important;\n}\n\n/* Wochenend-Kopfzellen */\n\n#calendar .fc-col-header-cell.fc-day-sat,\n#calendar .fc-col-header-cell.fc-day-sun {\n background-color: #d6d6d6 !important;\n}\n\n/*\n * Monatsansicht:\n * kein Scrollen innerhalb des Monats.\n */\n#calendar .fc-daygrid .fc-scroller {\n height: auto !important;\n max-height: none !important;\n overflowLine truncated
|
||||
"html": "<div id=\"calendarWrapper\">\n <div id=\"calendarHeader\">\n <div id=\"calendarSeatTitle\">\n Kalender\n </div>\n </div>\n\n <div id=\"calendar\"></div>\n\n <div id=\"calendarSelection\">\n Keine Auswahl\n </div>\n</div>\n\n<link\n rel=\"stylesheet\"\n href=\"https://cdn.jsdelivr.net/npm/[email protected]/index.global.min.css\"\n>\n\n<script\n src=\"https://cdn.jsdelivr.net/npm/[email protected]/index.global.min.js\">\n</script>",
|
||||
"js": "let calendar = null;\nlet resizeTimer = null;\n\nconst MONTH_HEIGHT = 620;\nconst MONTH_CONTENT_HEIGHT = 550;\n\nconst DAY_HEIGHT = 600;\nconst DAY_CONTENT_HEIGHT = 480;\n\nconst BUSINESS_START_MINUTES = 7 * 60;\nconst BUSINESS_END_MINUTES = 18 * 60;\n\nconst SLOT_MINUTES = 30;\n\nfunction getModel() {\n const model = appsmith.model || {};\n\n if (typeof model === \"string\") {\n try {\n return JSON.parse(model);\n } catch (error) {\n return {};\n }\n }\n\n return model;\n}\n\nfunction getEvents() {\n const model = getModel();\n\n return Array.isArray(model.events)\n ? model.events\n : [];\n}\n\nfunction getSeatName() {\n const model = getModel();\n\n return (\n model.seatName ||\n model.seatId ||\n \"Kein Platz ausgewählt\"\n );\n}\n\nfunction updateSeatTitle() {\n const element =\n document.getElementById(\n \"calendarSeatTitle\"\n );\n\n if (!element) {\n return;\n }\n\n element.textContent =\n `Kalender für ${getSeatName()}`;\n}\n\nfunction updateSelectionText(text) {\n const element =\n document.getElementById(\n \"calendarSelection\"\n );\n\n if (!element) {\n return;\n }\n\n const isDayView =\n calendar &&\n calendar.view &&\n calendar.view.type ===\n \"timeGridDay\";\n\n if (isDayView) {\n element.textContent = \"\";\n element.style.display = \"none\";\n return;\n }\n\n element.style.display = \"block\";\n element.textContent = text;\n}\n\nfunction updateCalendarViewSettings(viewType) {\n if (!calendar) {\n return;\n }\n\n const isDayView =\n viewType === \"timeGridDay\";\n\n calendar.setOption(\n \"height\",\n isDayView\n ? DAY_HEIGHT\n : MONTH_HEIGHT\n );\n\n calendar.setOption(\n \"contentHeight\",\n isDayView\n ? DAY_CONTENT_HEIGHT\n : MONTH_CONTENT_HEIGHT\n );\n\n calendar.setOption(\n \"expandRows\",\n !isDayView\n );\n\n if (\n typeof calendar.updateSize ===\n \"function\"\n ) {\n calendar.updateSize();\n }\n}\n\nfunction scheduleResize() {\n window.clearTimeout(\n resizeTimer\n );\n\n resizeTimer =\n window.setTimeout(() => {\n if (calendar) {\n calendar.updateSize();\n }\n }, 250);\n}\n\nfunction isWeekend(date) {\n const day =\n date.getDay();\n\n return (\n day === 0 ||\n day === 6\n );\n}\n\nfunction isBusinessDay(date) {\n const day =\n date.getDay();\n\n return (\n day >= 1 &&\n day <= 5\n );\n}\n\nfunction getMinutesOfDay(date) {\n return (\n date.getHours() * 60 +\n date.getMinutes()\n );\n}\n\nfunction isBusinessTimeRange(\n start,\n end\n) {\n if (!start || !end) {\n return false;\n }\n\n if (!isBusinessDay(start)) {\n return false;\n }\n\n if (\n start.toDateString() !==\n end.toDateString()\n ) {\n return false;\n }\n\n const startMinutes =\n getMinutesOfDay(start);\n\n const endMinutes =\n getMinutesOfDay(end);\n\n return (\n startMinutes >=\n BUSINESS_START_MINUTES &&\n endMinutes <=\n BUSINESS_END_MINUTES &&\n endMinutes > startMinutes\n );\n}\n\nfunction isBusinessDayRange(\n start,\n end\n) {\n if (!start || !end) {\n return false;\n }\n\n const lastSelectedDay =\n new Date(\n end.getTime() - 1\n );\n\n const current =\n new Date(start);\n\n current.setHours(\n 12,\n 0,\n 0,\n 0\n );\n\n lastSelectedDay.setHours(\n 12,\n 0,\n 0,\n 0\n );\n\n while (\n current <=\n lastSelectedDay\n ) {\n if (!isBusinessDay(current)) {\n return false;\n }\n\n current.setDate(\n current.getDate() + 1\n );\n }\n\n return true;\n}\n\nfunction showWeekendMessage() {\n updateSelectionText(\n \"Samstag und Sonntag sind nicht buchbar.\"\n );\n}\n\nfunction showBusinessHoursMessage() {\n updateSelectionText(\n \"Reservierungen sind Montag bis Freitag von 07:00 bis 18:00 Uhr möglich.\"\n );\n}\n\nfunction openDayView(date) {\n if (!calendar) {\n return;\n }\n\n if (isWeekend(date)) {\n showWeekendMessage();\n return;\n }\n\n calendar.changeView(\n \"timeGridDay\",\n date\n );\n}\n\nfunction isDayNumberClick(info) {\n const target =\n info.jsEvent &&\n info.jsEvent.target;\n\n if (\n !target ||\n typeof target.closest !==\n \"function\"\n ) {\n return false;\n }\n\n return Boolean(\n target.closest(\n \".fc-daygrid-day-number\"\n )\n );\n}\n\nfunction roundToHalfHour(date) {\n const result =\n new Date(date);\n\n const minutes =\n result.getMinutes();\n\n result.setSeconds(\n 0,\n 0\n );\n\n result.setMinutes(\n minutes < 30\n ? 0\n : 30\n );\n\n return result;\n}\n\nfunction pad(value) {\n return String(value).padStart(\n 2,\n \"0\"\n );\n}\n\n/*\n * Lokales Datum ohne UTC-Verschiebung.\n * Beispiel: 17.08.2026\n */\nfunction formatLocalDate(date) {\n return [\n date.getFullYear(),\n pad(date.getMonth() + 1),\Line truncated
|
||||
"js": "let calendar = null;\nlet resizeTimer = null;\nlet modelChangeRegistered = false;\nlet resizeRegistered = false;\n\nconst MONTH_HEIGHT = 620;\nconst MONTH_CONTENT_HEIGHT = 550;\n\nconst DAY_HEIGHT = 600;\nconst DAY_CONTENT_HEIGHT = 480;\n\nconst BUSINESS_START_MINUTES = 7 * 60;\nconst BUSINESS_END_MINUTES = 18 * 60;\nconst SLOT_MINUTES = 30;\n\nfunction getModel() {\n const model = appsmith.model || {};\n\n if (typeof model === \"string\") {\n try {\n return JSON.parse(model);\n } catch (error) {\n return {};\n }\n }\n\n return model;\n}\n\nfunction getEvents() {\n const model = getModel();\n return Array.isArray(model.events) ? model.events : [];\n}\n\nfunction getSeatName() {\n const model = getModel();\n return model.seatName || model.seatId || \"Kein Platz ausgewählt\";\n}\n\nfunction updateSeatTitle() {\n const element = document.getElementById(\"calendarSeatTitle\");\n\n if (!element) {\n return;\n }\n\n element.textContent = `Kalender für ${getSeatName()}`;\n}\n\nfunction isDayView() {\n return Boolean(\n calendar &&\n calendar.view &&\n calendar.view.type === \"timeGridDay\"\n );\n}\n\nfunction updateSelectionText(text) {\n const element = document.getElementById(\"calendarSelection\");\n\n if (!element) {\n return;\n }\n\n if (isDayView()) {\n element.textContent = \"\";\n element.style.display = \"none\";\n return;\n }\n\n element.style.display = \"block\";\n element.textContent = text;\n}\n\nfunction updateCalendarViewSettings(viewType) {\n if (!calendar) {\n return;\n }\n\n const dayView = viewType === \"timeGridDay\";\n\n calendar.setOption(\"height\", dayView ? DAY_HEIGHT : MONTH_HEIGHT);\n calendar.setOption(\n \"contentHeight\",\n dayView ? DAY_CONTENT_HEIGHT : MONTH_CONTENT_HEIGHT\n );\n calendar.setOption(\"expandRows\", !dayView);\n\n if (typeof calendar.updateSize === \"function\") {\n calendar.updateSize();\n }\n}\n\nfunction scheduleResize() {\n window.clearTimeout(resizeTimer);\n\n resizeTimer = window.setTimeout(() => {\n if (calendar) {\n calendar.updateSize();\n }\n }, 250);\n}\n\nfunction isWeekend(date) {\n const day = date.getDay();\n return day === 0 || day === 6;\n}\n\nfunction isBusinessDay(date) {\n const day = date.getDay();\n return day >= 1 && day <= 5;\n}\n\nfunction getMinutesOfDay(date) {\n return date.getHours() * 60 + date.getMinutes();\n}\n\nfunction isBusinessTimeRange(start, end) {\n if (!start || !end) {\n return false;\n }\n\n if (!isBusinessDay(start)) {\n return false;\n }\n\n if (start.toDateString() !== end.toDateString()) {\n return false;\n }\n\n const startMinutes = getMinutesOfDay(start);\n const endMinutes = getMinutesOfDay(end);\n\n return (\n startMinutes >= BUSINESS_START_MINUTES &&\n endMinutes <= BUSINESS_END_MINUTES &&\n endMinutes > startMinutes\n );\n}\n\nfunction isBusinessDayRange(start, end) {\n if (!start || !end || end <= start) {\n return false;\n }\n\n const lastSelectedDay = new Date(end.getTime() - 1);\n const current = new Date(start);\n\n current.setHours(12, 0, 0, 0);\n lastSelectedDay.setHours(12, 0, 0, 0);\n\n while (current <= lastSelectedDay) {\n if (!isBusinessDay(current)) {\n return false;\n }\n\n current.setDate(current.getDate() + 1);\n }\n\n return true;\n}\n\nfunction showWeekendMessage() {\n updateSelectionText(\"Samstag und Sonntag sind nicht buchbar.\");\n}\n\nfunction showBusinessHoursMessage() {\n updateSelectionText(\n \"Reservierungen sind Montag bis Freitag von 07:00 bis 18:00 Uhr möglich.\"\n );\n}\n\nfunction openDayView(date) {\n if (!calendar) {\n return;\n }\n\n if (isWeekend(date)) {\n showWeekendMessage();\n return;\n }\n\n calendar.changeView(\"timeGridDay\", date);\n}\n\nfunction isDayNumberClick(info) {\n const target = info.jsEvent && info.jsEvent.target;\n\n if (!target || typeof target.closest !== \"function\") {\n return false;\n }\n\n return Boolean(target.closest(\".fc-daygrid-day-number\"));\n}\n\nfunction roundToHalfHour(date) {\n const result = new Date(date);\n const minutes = result.getMinutes();\n\n result.setSeconds(0, 0);\n result.setMinutes(minutes < 30 ? 0 : 30);\n\n return result;\n}\n\nfunction pad(value) {\n return String(value).padStart(2, \"0\");\n}\n\nfunction formatLocalDate(date) {\n return [\n date.getFullYear(),\n pad(date.getMonth() + 1),\n pad(date.getDate())\n ].join(\"-\");\n}\n\nfunction formatLocalTime(date) {\n return [\n pad(date.getHours()),\n pad(date.getMinutes()),\n pad(date.getSeconds())\n ].join(\":\");\n}\n\nfunction formatLocalDateTime(date) {\n return `${formatLocalDate(date)}T${formatLocalTime(date)}`;\n}\n\nfunction formatDateTime(date) {\n if (!date) {\n return \"\";\n }\n\n return new Intl.DateTimeFormat(\"de-DE\", {\n dateStyle: \"short\",\n timeStyle: \"short\"\n }).format(date);\n}\n\nfunction triggerAppsmithEvent(evenLine truncated
|
||||
},
|
||||
"version": 1,
|
||||
"widgetId": "ad7fob2vs9",
|
||||
|
||||
Reference in new issue
Block a user