diff --git a/front/js/entry/RecordEditEntry/RecordEditEntry.svelte b/front/js/entry/RecordEditEntry/RecordEditEntry.svelte
index af3b495..a9e2f84 100644
--- a/front/js/entry/RecordEditEntry/RecordEditEntry.svelte
+++ b/front/js/entry/RecordEditEntry/RecordEditEntry.svelte
@@ -50,6 +50,7 @@
{channel}
fields={data.fields}
edgeRecordPreviews={data.edgeRecordPreviewsDraft}
+ filesPreviews={data.filesPreviewsDraft}
{record}
{selectedLocales}
validationErrors={data.validationErrors}
@@ -62,6 +63,7 @@
{channel}
fields={data.fields}
edgeRecordPreviews={data.edgeRecordPreviewsLive}
+ filesPreviews={data.filesPreviewsLive}
{record}
{selectedLocales}
validationErrors={data.validationErrors}
diff --git a/front/js/entry/RecordEditEntry/RecordForm.svelte b/front/js/entry/RecordEditEntry/RecordForm.svelte
index 92a6f1a..084cc35 100644
--- a/front/js/entry/RecordEditEntry/RecordForm.svelte
+++ b/front/js/entry/RecordEditEntry/RecordForm.svelte
@@ -9,6 +9,7 @@
validationErrors,
fieldData,
edgeRecordPreviews,
+ filesPreviews,
selectedLocales,
} = $props();
const findFieldValidationError = (field, locale) => {
@@ -26,6 +27,13 @@
(e) => e.edge.fieldId === field.id && e.edge.locale === locale,
);
};
+ const findFieldFiles = (field, locale) => {
+ return filesPreviews.filter(
+ (f) =>
+ f.recordFile.fieldId === field.id &&
+ f.recordFile.locale === locale,
+ );
+ };
{#each fields as field}
@@ -88,6 +96,6 @@
schemaField={field}
{locale}
dataField={findDataField(field, locale)}
- edgeRecordPreviews={findFieldEdges(field, locale)}
+ filesPreviews={findFieldFiles(field, locale)}
>
{/snippet}
diff --git a/front/js/entry/RecordEditEntry/fields/FileField.svelte b/front/js/entry/RecordEditEntry/fields/FileField.svelte
index f43de6a..757e69d 100644
--- a/front/js/entry/RecordEditEntry/fields/FileField.svelte
+++ b/front/js/entry/RecordEditEntry/fields/FileField.svelte
@@ -13,6 +13,7 @@
locale,
validationError,
edgeRecordPreviews,
+ filesPreviews,
} = $props();
let originalValue = dataField?.value ?? schemaField.props.default;
let newValue = $state(originalValue);
@@ -26,7 +27,7 @@
let suggestionsLoaded = $state(false);
let suggestions = $state([]);
- let selectedRecordIds = $state([]);
+ let selectedFilesIds = $state([]);
let dialog = $state();
function handleModalOpen(e) {
@@ -35,10 +36,10 @@
if (suggestionsLoaded) {
return;
}
- // get(app.url("records/files"), { recordId: record.id }, (data, err) => {
- suggestionsLoaded = true;
- // suggestions = data;
- // });
+ get(app.url("records/files"), { recordId: record.id }, (data, err) => {
+ suggestionsLoaded = true;
+ suggestions = data;
+ });
}
function handleModalClose(e) {
@@ -48,9 +49,9 @@
function handleInsertSelected() {
suggestionsLoaded = false;
post(
- app.url("edges/many"),
+ app.url("records/files"),
{
- toIds: selectedRecordIds,
+ toIds: selectedFilesIds,
from: record.id,
fieldId: schemaField.id,
locale: locale,
@@ -179,17 +180,13 @@
- {suggestion.title}
- |
-
-
- {suggestion.schemaName}
-
+ {suggestion.name}
|
+ |
{/each}
@@ -201,21 +198,20 @@
- {#if edgeRecordPreviews.length == 0}
- No relations exist
+ {#if filesPreviews.length == 0}
+ No files exist
{:else}
- {#snippet itemView(edgeRecordPreview)}
+ {#snippet itemView(filesPreview)}
diff --git a/src/Core/Data/RecordFilePreview.php b/src/Core/Data/RecordFilePreview.php
new file mode 100644
index 0000000..bc6679f
--- /dev/null
+++ b/src/Core/Data/RecordFilePreview.php
@@ -0,0 +1,9 @@
+where("id", $file->id)
// ->update(FileModule::toDb($file));
// }
+ //
+ public static function findShared(): array
+ {
+ return DB::table(self::TABLE_NAME)
+ ->where("is_shared", true)
+ ->get()
+ ->map(fn($file) => FileModule::fromDb($file))
+ ->toArray();
+ }
+
+ public static function findByRecordId(string $recordId): array
+ {
+ return DB::table(self::TABLE_NAME)
+ ->where("record_id", $recordId)
+ ->get()
+ ->map(fn($file) => FileModule::fromDb($file))
+ ->toArray();
+ }
public static function delete(string $fileId): void
{
diff --git a/src/Core/Repository/RecordRepo.php b/src/Core/Repository/RecordRepo.php
index c5c9974..42524fd 100644
--- a/src/Core/Repository/RecordRepo.php
+++ b/src/Core/Repository/RecordRepo.php
@@ -5,6 +5,8 @@ use Lucent\Core\Data\Record;
use Lucent\Core\Data\RecordPreview;
use Lucent\Core\Data\RecordMode;
use Lucent\Core\Data\EdgeRecordPreview;
+use Lucent\Core\File\FileModule;
+use Lucent\Core\File\RecordFileModule;
use Lucent\Core\Record\RecordModule;
class RecordRepo
@@ -159,4 +161,28 @@ class RecordRepo
)
->toArray();
}
+
+ /**
+ * @param Schema[] $schemas
+ * @return RecordFilePreview[]
+ */
+ public static function findRecordFilePreviewsByRecordId(
+ string $recordId,
+ ): array {
+ return DB::table("records_files")
+ ->select(
+ "records_files.*",
+ "files.*",
+ "files.id as file_id",
+ "records_files.id as record_file_id",
+ )
+ ->where("records_files.record_id", $recordId)
+ ->join("files", "records_files.file_id", "=", "files.id")
+ ->orderBy("records_files.rank", "asc")
+ ->distinct()
+ ->get()
+
+ ->map(fn($row) => RecordFileModule::recordFilePreviewFromDb($row))
+ ->toArray();
+ }
}
diff --git a/src/Http/Controller/RecordController.php b/src/Http/Controller/RecordController.php
index 8b01568..63496a8 100644
--- a/src/Http/Controller/RecordController.php
+++ b/src/Http/Controller/RecordController.php
@@ -12,6 +12,7 @@ use Lucent\Core\Query\QueryModule;
use Lucent\Core\Repository\FieldRepo;
use Lucent\Core\Repository\SchemaRepo;
use Lucent\Core\Repository\EdgeRepo;
+use Lucent\Core\Repository\FileRepo;
use Lucent\Core\Repository\RecordFieldRepo;
use Lucent\Core\Record\RecordModule;
use Lucent\Core\Record\RecordFieldModule;
@@ -154,27 +155,6 @@ class RecordController
public function edit(Request $request)
{
$recordId = $request->route("id");
-
- // $graph = $this->query
- // ->filter(["id" => $rid])
- // ->limit(1)
- // ->skip(0)
- // ->childrenDepth(2)
- // ->childrenLimit(200)
- // ->parentsDepth(1)
- // ->parentsLimit(200)
- // ->run();
-
- // if ($graph->records->isEmpty()) {
- // return $this->svelte->render(
- // layout: "channel",
- // view: "recordNotFound",
- // title: "Record Not Found",
- // );
- // }
-
- // $record = $graph->records->first();
- //
$record = RecordRepo::findOne($recordId);
$recordFields = RecordFieldRepo::findByRecordId($recordId);
$draftData = collect($recordFields)
@@ -213,6 +193,20 @@ class RecordController
$recordEdges,
);
+ $recordFilesPreviews = RecordRepo::findRecordFilePreviewsByRecordId(
+ $record->id,
+ );
+
+ $recordFilesPreviewsDraft = collect($recordFilesPreviews)
+ ->where("recordFile.mode", RecordMode::DRAFT)
+ ->values()
+ ->toArray();
+
+ $recordFilesPreviewsLive = collect($recordFilesPreviews)
+ ->where("recordFile.mode", RecordMode::LIVE)
+ ->values()
+ ->toArray();
+
return Svelte::view(
view: "recordEdit",
title: "Edit Record",
@@ -222,6 +216,8 @@ class RecordController
"fields" => $fields,
"edgeRecordPreviewsDraft" => toArray($edgeRecordPreviewsDraft),
"edgeRecordPreviewsLive" => toArray($edgeRecordPreviewsLive),
+ "filesPreviewsDraft" => toArray($recordFilesPreviewsDraft),
+ "filesPreviewsLive" => toArray($recordFilesPreviewsLive),
"record" => toArray($record),
"draftData" => $draftData,
"liveData" => $liveData,
@@ -240,6 +236,17 @@ class RecordController
return ok(toArray($records));
}
+ public function files(Request $request)
+ {
+ $recordId = $request->input("recordId");
+
+ $files = empty($recordId)
+ ? FileRepo::findShared()
+ : FileRepo::findByRecordId($recordId);
+
+ return ok(toArray($files));
+ }
+
public function postCreate(Request $request)
{
$schemaId = $request->input("schemaId");
diff --git a/src/Http/web.php b/src/Http/web.php
index 1d11325..d38777b 100644
--- a/src/Http/web.php
+++ b/src/Http/web.php
@@ -70,6 +70,9 @@ Route::group(
// CONTENT
Route::get("content/{id}", [RecordController::class, "index"]);
+ // RECORD FILES
+ Route::get("records/files", [RecordController::class, "files"]);
+
// RECORD
Route::get("records/suggest", [RecordController::class, "suggest"]);
Route::get("records/{id}", [RecordController::class, "edit"]);