shwo live data
This commit is contained in:
@@ -1,14 +1,16 @@
|
||||
<script>
|
||||
import ChannelLayout from "../../layouts/ChannelLayout.svelte";
|
||||
import { onMount } from "svelte";
|
||||
import TextField from "./fields/TextField.svelte";
|
||||
|
||||
import LocaleChooser from "./LocaleChooser.svelte";
|
||||
import RecordForm from "./RecordForm.svelte";
|
||||
import RecordStatus from "./RecordStatus.svelte";
|
||||
import PublishingOptions from "./PublishingOptions.svelte";
|
||||
import { getSelectedLocales } from "./locale.svelte.js";
|
||||
let { channel, user, data } = $props();
|
||||
let selectedLocales = $state(getSelectedLocales());
|
||||
let record = $state(data.record);
|
||||
let showPublished = $state(false);
|
||||
|
||||
function handleLocaleChange() {
|
||||
selectedLocales = getSelectedLocales();
|
||||
@@ -22,48 +24,35 @@
|
||||
<div style="display:flex;gap:20px;justify-content: space-between;">
|
||||
<LocaleChooser {channel} onLocaleChange={handleLocaleChange}
|
||||
></LocaleChooser>
|
||||
|
||||
<label>
|
||||
<input bind:checked={showPublished} type="checkbox" role="switch" />
|
||||
Show Live Data
|
||||
</label>
|
||||
<PublishingOptions {record} status={data.recordStatus}
|
||||
></PublishingOptions>
|
||||
</div>
|
||||
<fieldset disabled={data.recordStatus === "trashed"}>
|
||||
{#each data.fields as field}
|
||||
<div style="display:flex;gap:20px;">
|
||||
{#if field.type === "text"}
|
||||
<TextField
|
||||
{channel}
|
||||
{record}
|
||||
validationError={data.validationErrors.find(
|
||||
(f) =>
|
||||
f.fieldId === field.id && f.locale === "main",
|
||||
)}
|
||||
schemaField={field}
|
||||
locale="main"
|
||||
dataField={data.draftData.find(
|
||||
(f) => f.id === field.id && f.locale === "main",
|
||||
)}
|
||||
></TextField>
|
||||
{#if field.translatable}
|
||||
{#each selectedLocales as locale (locale)}
|
||||
<TextField
|
||||
{channel}
|
||||
{record}
|
||||
validationError={data.validationErrors.find(
|
||||
(f) =>
|
||||
f.fieldId === field.id &&
|
||||
f.locale === locale,
|
||||
)}
|
||||
schemaField={field}
|
||||
{locale}
|
||||
dataField={data.draftData.find(
|
||||
(f) =>
|
||||
f.id === field.id &&
|
||||
f.locale === locale,
|
||||
)}
|
||||
></TextField>
|
||||
{/each}
|
||||
{/if}
|
||||
{/if}
|
||||
</div>
|
||||
{/each}
|
||||
</fieldset>
|
||||
{#if !showPublished}
|
||||
<fieldset disabled={data.recordStatus === "trashed"}>
|
||||
<RecordForm
|
||||
{channel}
|
||||
fields={data.fields}
|
||||
{record}
|
||||
{selectedLocales}
|
||||
validationErrors={data.validationErrors}
|
||||
fieldData={data.draftData}
|
||||
></RecordForm>
|
||||
</fieldset>
|
||||
{:else}
|
||||
<fieldset disabled={true}>
|
||||
<RecordForm
|
||||
{channel}
|
||||
fields={data.fields}
|
||||
{record}
|
||||
{selectedLocales}
|
||||
validationErrors={data.validationErrors}
|
||||
fieldData={data.liveData}
|
||||
></RecordForm>
|
||||
</fieldset>
|
||||
{/if}
|
||||
{/snippet}
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
<script>
|
||||
import TextField from "./fields/TextField.svelte";
|
||||
let {
|
||||
fields,
|
||||
record,
|
||||
channel,
|
||||
validationErrors,
|
||||
fieldData,
|
||||
selectedLocales,
|
||||
} = $props();
|
||||
</script>
|
||||
|
||||
{#each fields as field}
|
||||
<div style="display:flex;gap:20px;">
|
||||
{#if field.type === "text"}
|
||||
<TextField
|
||||
{channel}
|
||||
{record}
|
||||
validationError={validationErrors.find(
|
||||
(f) => f.fieldId === field.id && f.locale === "main",
|
||||
)}
|
||||
schemaField={field}
|
||||
locale="main"
|
||||
dataField={fieldData.find(
|
||||
(f) => f.id === field.id && f.locale === "main",
|
||||
)}
|
||||
></TextField>
|
||||
{#if field.translatable}
|
||||
{#each selectedLocales as locale (locale)}
|
||||
<TextField
|
||||
{channel}
|
||||
{record}
|
||||
validationError={validationErrors.find(
|
||||
(f) =>
|
||||
f.fieldId === field.id && f.locale === locale,
|
||||
)}
|
||||
schemaField={field}
|
||||
{locale}
|
||||
dataField={fieldData.find(
|
||||
(f) => f.id === field.id && f.locale === locale,
|
||||
)}
|
||||
></TextField>
|
||||
{/each}
|
||||
{/if}
|
||||
{/if}
|
||||
</div>
|
||||
{/each}
|
||||
@@ -5,6 +5,7 @@ use Lucent\Core\Data\RecordField;
|
||||
use Lucent\Core\Data\RecordMode;
|
||||
use Lucent\Core\Repository\RecordFieldRepo;
|
||||
use stdClass;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class RecordFieldModule
|
||||
{
|
||||
@@ -20,7 +21,7 @@ class RecordFieldModule
|
||||
})
|
||||
->toArray();
|
||||
|
||||
DB::transaction(function () use ($recordField) {
|
||||
DB::transaction(function () use ($liveData, $recordId) {
|
||||
RecordFieldRepo::deleteLiveByRecordId($recordId);
|
||||
RecordFieldRepo::insertMany($liveData);
|
||||
});
|
||||
|
||||
@@ -12,6 +12,7 @@ use Lucent\Core\Repository\FieldRepo;
|
||||
use Lucent\Core\Repository\SchemaRepo;
|
||||
use Lucent\Core\Repository\RecordFieldRepo;
|
||||
use Lucent\Core\Record\RecordModule;
|
||||
use Lucent\Core\Record\RecordFieldModule;
|
||||
use Lucent\Id\Id;
|
||||
use Lucent\LucentException;
|
||||
use Lucent\Query\Operator\OperatorRegistry;
|
||||
@@ -255,6 +256,10 @@ class RecordController
|
||||
->where("mode", RecordMode::DRAFT)
|
||||
->values()
|
||||
->toArray();
|
||||
$liveData = collect($recordFields)
|
||||
->where("mode", RecordMode::LIVE)
|
||||
->values()
|
||||
->toArray();
|
||||
|
||||
$schemas = SchemaRepo::all();
|
||||
$schema = collect($schemas)->firstWhere("id", $record->schemaId);
|
||||
@@ -279,6 +284,7 @@ class RecordController
|
||||
// "graph" => toArray($graph),
|
||||
"record" => toArray($record),
|
||||
"draftData" => $draftData,
|
||||
"liveData" => $liveData,
|
||||
"validationErrors" => $validationErrors,
|
||||
"recordStatus" => $recordStatus,
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user