mirror of https://github.com/MarceauKa/shaark.git
✨ Update and delete links
This commit is contained in:
parent
952225c39a
commit
93e05311b5
|
@ -54,4 +54,26 @@ class LinkController extends Controller
|
|||
'status' => 'created',
|
||||
]);
|
||||
}
|
||||
|
||||
public function update(StoreLinkRequest $request, int $id)
|
||||
{
|
||||
$link = Link::findOrFail($id);
|
||||
$data = collect($request->validated());
|
||||
|
||||
$link->fill($data->only('title', 'content', 'url')->toArray());
|
||||
$link->is_private = $request->has('is_private');
|
||||
|
||||
if ($data['tags']) {
|
||||
$link->syncTags($data['tags']);
|
||||
}
|
||||
|
||||
if ($link->url) {
|
||||
$link->findExtra();
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'id' => $link->id,
|
||||
'status' => 'updated',
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,4 +24,30 @@ class LinkController extends Controller
|
|||
'tags' => Tag::all()->pluck('name')->toJson(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function edit(Request $request, int $id)
|
||||
{
|
||||
$link = Link::with('tags')->findOrFail($id);
|
||||
$link = \App\Http\Resources\Link::make($link)->toArray($request);
|
||||
|
||||
return view('link-form')->with([
|
||||
'submit' => route('api.link.update', $id),
|
||||
'parse' => route('api.link.parse'),
|
||||
'method' => 'PUT',
|
||||
'link' => $link,
|
||||
'tags' => Tag::all()->pluck('name')->toJson(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function delete(Request $request, int $id, string $hash)
|
||||
{
|
||||
if ($hash !== csrf_token()) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
$link = Link::findOrFail($id);
|
||||
$link->delete();
|
||||
|
||||
return redirect()->back();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,7 +17,8 @@ class Link extends JsonResource
|
|||
return [
|
||||
'title' => $this->title,
|
||||
'content' => $this->content,
|
||||
'url' => '#',
|
||||
'tags' => $this->tags->pluck('name')->toArray(),
|
||||
'url' => $this->url,
|
||||
'created_at' => $this->created_at,
|
||||
];
|
||||
}
|
||||
|
|
|
@ -61,7 +61,7 @@ class Link extends Model
|
|||
return $this;
|
||||
}
|
||||
|
||||
public function sharingBookmarkCode(): string
|
||||
public static function sharingBookmarkCode(): string
|
||||
{
|
||||
return vsprintf("javascript:(function(){var url=location.href; window.open('%s?url=' + encodeURIComponent(url), '_blank', '%s');})();", [
|
||||
route('link.create'),
|
||||
|
|
|
@ -98,9 +98,13 @@ export default {
|
|||
},
|
||||
|
||||
mounted() {
|
||||
if (this.queryUrl) {
|
||||
if (this.queryUrl && this.link.length === 0) {
|
||||
this.form.url = this.queryUrl;
|
||||
}
|
||||
|
||||
if (this.link) {
|
||||
this.form = this.link;
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
@ -133,11 +137,16 @@ export default {
|
|||
url: this.submitUrl,
|
||||
data: this.form
|
||||
}).then((response) => {
|
||||
this.reset();
|
||||
this.$toasted.success("Lien ajouté !");
|
||||
if (this.link) {
|
||||
this.$toasted.success("Lien modifié !");
|
||||
this.loading = false;
|
||||
} else {
|
||||
this.$toasted.success("Lien ajouté !");
|
||||
this.reset();
|
||||
}
|
||||
}).catch((error) => {
|
||||
this.loading = false;
|
||||
this.$toasted.error("Impossible d'ajouter le lien.");
|
||||
this.$toasted.error("Impossible d'enregistrer le lien.");
|
||||
console.log(error);
|
||||
})
|
||||
},
|
||||
|
@ -156,7 +165,7 @@ export default {
|
|||
|
||||
watch: {
|
||||
'form.url': _.debounce(function (value) {
|
||||
if (value) {
|
||||
if (value && ! this.link) {
|
||||
this.parse(value)
|
||||
}
|
||||
}, 500),
|
||||
|
|
|
@ -28,8 +28,19 @@
|
|||
@endif
|
||||
</div>
|
||||
|
||||
<div class="card-footer">
|
||||
{{ $link->created_at->diffForHumans() }}
|
||||
<div class="card-footer d-flex justify-content-between">
|
||||
<span>{{ $link->created_at->diffForHumans() }}</span>
|
||||
@if(auth()->check())
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-outline-dark btn-sm dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
Edit
|
||||
</button>
|
||||
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
|
||||
<a class="dropdown-item" href="{{ route('link.edit', $link->id) }}">Modifier</a>
|
||||
<a class="dropdown-item" href="{{ route('link.delete', [$link->id, csrf_token()]) }}">Supprimer</a>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
|
@ -52,3 +63,9 @@
|
|||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
<script>
|
||||
import ButtonDelete from "../js/components/ButtonDelete";
|
||||
export default {
|
||||
components: {ButtonDelete}
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -4,10 +4,12 @@
|
|||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-md-8">
|
||||
<link-form :link="{!! $link->toJson() !!}"
|
||||
<link-form :link="{{ json_encode($link) }}"
|
||||
parse-url="{{ $parse }}"
|
||||
submit-url="{{ $submit }}"
|
||||
@if(isset($query))
|
||||
query-url="{{ $query }}"
|
||||
@endif
|
||||
method="{{ $method }}"
|
||||
:tags="{{ $tags }}"
|
||||
></link-form>
|
||||
|
@ -19,7 +21,7 @@
|
|||
<p class="card-text">Glissez et déposez le bouton ci-dessous dans votre barre de favoris</p>
|
||||
<p class="card-text">
|
||||
<a class="btn btn-outline-primary"
|
||||
href="{{ $link->sharingBookmarkCode() }}"
|
||||
href="{{ \App\Link::sharingBookmarkCode() }}"
|
||||
>Shaare</a>
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
@ -7,3 +7,4 @@ Route::post('search', 'SearchController@search')->name('search');
|
|||
|
||||
Route::post('link/parse', 'LinkController@parse')->name('link.parse');
|
||||
Route::post('link', 'LinkController@store')->name('link.store');
|
||||
Route::put('link/{id}', 'LinkController@update')->name('link.update');
|
||||
|
|
|
@ -11,3 +11,5 @@ Route::auth([
|
|||
Route::get('/', 'HomeController@index')->name('home');
|
||||
|
||||
Route::get('lien/ajouter', 'LinkController@create')->name('link.create');
|
||||
Route::get('lien/modifier/{id}', 'LinkController@edit')->name('link.edit');
|
||||
Route::get('lien/supprimer/{id}/{hash}', 'LinkController@delete')->name('link.delete');
|
||||
|
|
Loading…
Reference in New Issue