Skip to content

Commit cdec98d

Browse files
Merge pull request #16 from botble/feat/render-without-layout
feat(importer): render importer without page layout
2 parents 629b3ef + 9c145e0 commit cdec98d

File tree

3 files changed

+136
-122
lines changed

3 files changed

+136
-122
lines changed

resources/views/import.blade.php

Lines changed: 1 addition & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -1,125 +1,5 @@
11
@extends(BaseHelper::getAdminMasterLayoutTemplate())
22

33
@section('content')
4-
@php
5-
/** @var \Botble\DataSynchronize\Importer\Importer $importer */
6-
7-
$acceptedFiles = Arr::join(array_map(fn ($item) => $item, $importer->getAcceptedFiles()), ',');
8-
@endphp
9-
10-
{!! apply_filters('data_synchronize_import_page_before', null, $importer) !!}
11-
12-
<x-core::form
13-
method="post"
14-
:url="route('data-synchronize.upload')"
15-
:data-validate-url="$importer->getValidateUrl()"
16-
:data-import-url="$importer->getImportUrl()"
17-
data-bb-toggle="import-form"
18-
:data-accepted-files="$acceptedFiles"
19-
:data-chunk-size="$importer->chunkSize()"
20-
:data-uploading-message="trans('packages/data-synchronize::data-synchronize.import.uploading_message')"
21-
:data-validate-failed-message="trans('packages/data-synchronize::data-synchronize.import.validating_failed_message')"
22-
class="data-synchronize-import-form"
23-
>
24-
<x-core::card>
25-
@if($importer->getHeading())
26-
<x-core::card.header>
27-
<x-core::card.title>
28-
{{ $importer->getHeading() }}
29-
</x-core::card.title>
30-
</x-core::card.header>
31-
@endif
32-
33-
<x-core::card.body>
34-
@if($importer->getExportUrl())
35-
<x-core::alert
36-
type="info"
37-
:data-url="$importer->getExportUrl()"
38-
>
39-
{!! BaseHelper::clean(trans(
40-
'packages/data-synchronize::data-synchronize.import.form.quick_export_message',
41-
[
42-
'label' => $importer->getLabel(),
43-
'export_csv_link' => Html::tag('button', trans('packages/data-synchronize::data-synchronize.import.form.quick_export_button', ['format' => 'CSV']), [
44-
'class' => 'data-synchronize-quick-export-button',
45-
'data-bb-toggle' => 'quick-export',
46-
'data-value' => 'csv',
47-
]),
48-
'export_excel_link' => Html::tag('button', trans('packages/data-synchronize::data-synchronize.import.form.quick_export_button', ['format' => 'Excel']), [
49-
'class' => 'data-synchronize-quick-export-button',
50-
'data-bb-toggle' => 'quick-export',
51-
'data-value' => 'xlsx',
52-
]),
53-
]
54-
)) !!}
55-
</x-core::alert>
56-
@endif
57-
58-
{!! apply_filters('data_synchronize_import_form_before', null, $importer) !!}
59-
60-
<div>
61-
<div class="dropzone">
62-
<div class="dz-message">
63-
{{ trans('packages/data-synchronize::data-synchronize.import.form.dropzone_message') }}
64-
</div>
65-
</div>
66-
67-
<x-core::form.helper-text class="mt-1">
68-
{{ trans('packages/data-synchronize::data-synchronize.import.form.allowed_extensions', ['extensions' => Arr::join($importer->getFileExtensions(), ', ')]) }}
69-
</x-core::form.helper-text>
70-
</div>
71-
72-
{!! apply_filters('data_synchronize_import_form_after', null, $importer) !!}
73-
74-
<pre class="mt-3 data-synchronize-import-output" style="display: none"></pre>
75-
</x-core::card.body>
76-
<x-core::card.footer>
77-
<x-core::button type="submit" color="primary" :disabled="true">
78-
{{ trans('packages/data-synchronize::data-synchronize.import.form.import_button') }}
79-
</x-core::button>
80-
</x-core::card.footer>
81-
</x-core::card>
82-
83-
<x-core::alert class="mt-3" type="danger" style="display: none" data-bb-toggle="import-errors">
84-
<ul></ul>
85-
</x-core::alert>
86-
</x-core::form>
87-
88-
{!! apply_filters('data_synchronize_import_page_after', null, $importer) !!}
89-
90-
@if($importer->getExportUrl())
91-
<x-core::form
92-
method="POST"
93-
:url="$importer->getExportUrl()"
94-
data-bb-toggle="export-data"
95-
:data-success-message="trans('packages/data-synchronize::data-synchronize.export.success_message')"
96-
:data-error-message="trans('packages/data-synchronize::data-synchronize.export.error_message')"
97-
/>
98-
@endif
99-
100-
@if ($importer->getExamples())
101-
@include('packages/data-synchronize::partials.example')
102-
@endif
103-
104-
@includeWhen($importer->showRulesCheatSheet(), 'packages/data-synchronize::partials.rules')
4+
@include('packages/data-synchronize::partials.importer')
1055
@stop
106-
107-
@push('footer')
108-
<x-core::custom-template id="data-synchronize-import-preview-template">
109-
<div class="position-relative d-flex gap-2 data-synchronize-import-preview-template">
110-
<x-core::icon name="ti ti-file" style="height: 2rem; width: 2rem" />
111-
<div>
112-
<h4><span data-dz-name></span></h4>
113-
<div class="d-flex align-items-center small text-muted">
114-
<span data-dz-size></span>
115-
<button type="button" class="ms-1 text-danger cursor-pointer" data-dz-remove>
116-
<x-core::icon name="ti ti-trash" />
117-
</button>
118-
</div>
119-
<div class="text-danger small" data-dz-errormessage></div>
120-
</div>
121-
</div>
122-
</x-core::custom-template>
123-
124-
{!! apply_filters('data_synchronize_import_page_footer', null, $importer) !!}
125-
@endpush
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
@php
2+
/** @var \Botble\DataSynchronize\Importer\Importer $importer */
3+
4+
$acceptedFiles = Arr::join(array_map(fn ($item) => $item, $importer->getAcceptedFiles()), ',');
5+
@endphp
6+
7+
{!! apply_filters('data_synchronize_import_page_before', null, $importer) !!}
8+
9+
<x-core::form
10+
method="post"
11+
:url="route('data-synchronize.upload')"
12+
:data-validate-url="$importer->getValidateUrl()"
13+
:data-import-url="$importer->getImportUrl()"
14+
data-bb-toggle="import-form"
15+
:data-accepted-files="$acceptedFiles"
16+
:data-chunk-size="$importer->chunkSize()"
17+
:data-uploading-message="trans('packages/data-synchronize::data-synchronize.import.uploading_message')"
18+
:data-validate-failed-message="trans('packages/data-synchronize::data-synchronize.import.validating_failed_message')"
19+
class="data-synchronize-import-form"
20+
>
21+
<x-core::card>
22+
@if($importer->getHeading())
23+
<x-core::card.header>
24+
<x-core::card.title>
25+
{{ $importer->getHeading() }}
26+
</x-core::card.title>
27+
</x-core::card.header>
28+
@endif
29+
30+
<x-core::card.body>
31+
@if($importer->getExportUrl())
32+
<x-core::alert
33+
type="info"
34+
:data-url="$importer->getExportUrl()"
35+
>
36+
{!! BaseHelper::clean(trans(
37+
'packages/data-synchronize::data-synchronize.import.form.quick_export_message',
38+
[
39+
'label' => $importer->getLabel(),
40+
'export_csv_link' => Html::tag('button', trans('packages/data-synchronize::data-synchronize.import.form.quick_export_button', ['format' => 'CSV']), [
41+
'class' => 'data-synchronize-quick-export-button',
42+
'data-bb-toggle' => 'quick-export',
43+
'data-value' => 'csv',
44+
]),
45+
'export_excel_link' => Html::tag('button', trans('packages/data-synchronize::data-synchronize.import.form.quick_export_button', ['format' => 'Excel']), [
46+
'class' => 'data-synchronize-quick-export-button',
47+
'data-bb-toggle' => 'quick-export',
48+
'data-value' => 'xlsx',
49+
]),
50+
]
51+
)) !!}
52+
</x-core::alert>
53+
@endif
54+
55+
{!! apply_filters('data_synchronize_import_form_before', null, $importer) !!}
56+
57+
<div>
58+
<div class="dropzone">
59+
<div class="dz-message">
60+
{{ trans('packages/data-synchronize::data-synchronize.import.form.dropzone_message') }}
61+
</div>
62+
</div>
63+
64+
<x-core::form.helper-text class="mt-1">
65+
{{ trans('packages/data-synchronize::data-synchronize.import.form.allowed_extensions', ['extensions' => Arr::join($importer->getFileExtensions(), ', ')]) }}
66+
</x-core::form.helper-text>
67+
</div>
68+
69+
{!! apply_filters('data_synchronize_import_form_after', null, $importer) !!}
70+
71+
<pre class="mt-3 data-synchronize-import-output" style="display: none"></pre>
72+
</x-core::card.body>
73+
<x-core::card.footer>
74+
<x-core::button type="submit" color="primary" :disabled="true">
75+
{{ trans('packages/data-synchronize::data-synchronize.import.form.import_button') }}
76+
</x-core::button>
77+
</x-core::card.footer>
78+
</x-core::card>
79+
80+
<x-core::alert class="mt-3" type="danger" style="display: none" data-bb-toggle="import-errors">
81+
<ul></ul>
82+
</x-core::alert>
83+
</x-core::form>
84+
85+
{!! apply_filters('data_synchronize_import_page_after', null, $importer) !!}
86+
87+
@if($importer->getExportUrl())
88+
<x-core::form
89+
method="POST"
90+
:url="$importer->getExportUrl()"
91+
data-bb-toggle="export-data"
92+
:data-success-message="trans('packages/data-synchronize::data-synchronize.export.success_message')"
93+
:data-error-message="trans('packages/data-synchronize::data-synchronize.export.error_message')"
94+
/>
95+
@endif
96+
97+
@if ($importer->getExamples())
98+
@include('packages/data-synchronize::partials.example')
99+
@endif
100+
101+
@includeWhen($importer->showRulesCheatSheet(), 'packages/data-synchronize::partials.rules')
102+
103+
<x-core::custom-template id="data-synchronize-import-preview-template">
104+
<div class="position-relative d-flex gap-2 data-synchronize-import-preview-template">
105+
<x-core::icon name="ti ti-file" style="height: 2rem; width: 2rem" />
106+
<div>
107+
<h4><span data-dz-name></span></h4>
108+
<div class="d-flex align-items-center small text-muted">
109+
<span data-dz-size></span>
110+
<button type="button" class="ms-1 text-danger cursor-pointer" data-dz-remove>
111+
<x-core::icon name="ti ti-trash" />
112+
</button>
113+
</div>
114+
<div class="text-danger small" data-dz-errormessage></div>
115+
</div>
116+
</div>
117+
</x-core::custom-template>
118+
119+
{!! apply_filters('data_synchronize_import_page_footer', null, $importer) !!}

src/Importer/Importer.php

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222

2323
abstract class Importer
2424
{
25+
protected bool $renderWithoutLayout = false;
26+
2527
abstract public function columns(): array;
2628

2729
abstract public function getValidateUrl(): string;
@@ -110,15 +112,28 @@ public function getHeading(): string
110112
);
111113
}
112114

115+
public function renderWithoutLayout(): View
116+
{
117+
$this->renderWithoutLayout = true;
118+
119+
return $this->render();
120+
}
121+
113122
public function render(): View
114123
{
115124
Assets::addStylesDirectly('vendor/core/packages/data-synchronize/css/data-synchronize.css')
116125
->addScriptsDirectly('vendor/core/packages/data-synchronize/js/data-synchronize.js')
117126
->addScripts('dropzone')
118127
->addStyles('dropzone');
119128

129+
$view = 'packages/data-synchronize::import';
130+
131+
if ($this->renderWithoutLayout) {
132+
$view = 'packages/data-synchronize::partials.importer';
133+
}
134+
120135
return view(
121-
apply_filters('data_synchronize_importer_view', 'packages/data-synchronize::import'),
136+
apply_filters('data_synchronize_importer_view', $view),
122137
['importer' => $this]
123138
);
124139
}

0 commit comments

Comments
 (0)