Create Doc

twopenny
ajikamaludin 2 years ago
parent 3582ba5433
commit b9fcec1b16

@ -3,8 +3,10 @@
namespace App\Http\Controllers;
use App\Mail\DocumentShare;
use App\Models\Category;
use App\Models\Department;
use App\Models\Document;
use App\Models\Type;
use App\Models\TypeDoc;
use App\Models\User;
use Illuminate\Http\Request;
@ -17,268 +19,113 @@ class DocumentController extends Controller
{
public function index(Request $request)
{
$query = Document::with(['department', 'type', 'shares']);
$query = Document::with(['type', 'category']);
if ($request->has('sortBy') && $request->has('sortRule')) {
$query->orderBy($request->sortBy, $request->sortRule);
} else {
$query->orderBy('created_at');
$query->orderBy('created_at', 'desc');
}
if ($request->q != null || $request->q != '') {
$query->where(function ($query) use ($request) {
$query->where('no_doc', 'like', '%'.$request->q.'%')
->orWhere('company_name', 'like', '%'.$request->q.'%')
->orWhere('pic_name', 'like', '%'.$request->q.'%')
->orWhere('name', 'like', '%'.$request->q.'%')
->orWhere('email', 'like', '%'.$request->q.'%');
->orWhere('company_name', 'like', '%'.$request->q.'%')
->orWhere('no', 'like', '%'.$request->q.'%');
});
}
if ($request->department_id != '') {
$query->where('department_id', $request->department_id);
}
if ($request->status != '') {
$query->where('status', $request->status);
}
if ($request->type_doc_id != '') {
$query->where('type_doc_id', $request->type_doc_id);
}
return inertia('Document/Index', [
'docs' => $query->paginate(10),
'types' => TypeDoc::all(),
'departments' => Department::all(),
]);
}
public function create()
{
return inertia('Document/Form', [
'types' => TypeDoc::all(),
'departments' => Department::all(),
'types' => Type::all(),
'categories' => Category::all(),
]);
}
public function store(Request $request)
{
$request->validate([
'no_doc' => 'required|string',
'company_name' => 'required|string',
'first_person_name' => 'required|string',
'second_person_name' => 'required|string',
'start_date' => 'required|date',
'end_date' => 'required|date|after_or_equal:'.$request->start_date,
'type_doc_id' => 'required|exists:type_docs,id',
'department_id' => 'required|exists:departments,id',
'pic_name' => 'required|string',
'email' => 'required|email',
'document' => 'required|file',
'note' => 'nullable',
'status' => 'required|numeric',
'reminders' => 'nullable|array',
'name' => 'required|string'
"no_doc" => "required|string",
"name" => "required|string",
"company_name" => "required|string",
"type_id" => "required|exists:types,id",
"category_id" => "required|exists:categories,id",
"publisher" => "required|string",
"description" => "nullable",
"publish_date" => "required|date",
"due_date" => "required_if:type,1",
"status" => "required|in:0,1",
"type" => "required|in:0,1",
"group" => "required|string",
"region" => "required|string",
"document" => "required|file",
]);
$lastDocs = Document::orderBy('created_at', 'desc')->first();
$lastDocs = $lastDocs ? $lastDocs : Document::make(['no' => 0]);
$docs = Document::make([
'no' => $lastDocs->no + 1,
'name' => $request->name,
'no_doc' => $request->no_doc,
'company_name' => $request->company_name,
'first_person_name' => $request->first_person_name,
'second_person_name' => $request->second_person_name,
'start_date' => $request->start_date,
'end_date' => $request->end_date,
'pic_name' => $request->pic_name,
'email' => $request->email,
'note' => $request->note,
'type_doc_id' => $request->type_doc_id,
'department_id' => $request->department_id,
'status' => Document::ACTIVE, //DOCUMENT CREATED ALWAYS ACTIVE
'user_id' => auth()->user()->id,
if($request->publish_date == Document::TYPE_TETAP) {
$request->validate([
"due_date" => "date|after_or_equal:".$request->publish_date
]);
}
$doc = Document::make([
"no" => Document::count() + 1,
"no_doc" => $request->no_doc,
"name" => $request->name,
"company_name" => $request->company_name,
"type_id" => $request->type_id,
"category_id" => $request->category_id,
"publisher" => $request->publisher,
"description" => $request->description,
"publish_date" => $request->publish_date,
"due_date" => $request->due_date,
"status" => $request->status,
"type" => $request->type,
"group" => $request->group,
"region" => $request->region,
"user_id" => auth()->user()->id,
]);
$file = $request->file('document');
$file->store('documents', 'public');
$docs->document = $file->hashName();
DB::beginTransaction();
$docs->save();
$doc->document = $file->hashName();
if ($request->has('reminders')) {
foreach ($request->reminders as $reminder) {
$docs->reminders()->updateOrCreate(['date' => $reminder]);
}
}
DB::commit();
return redirect()->route('docs.index')
->with('message', ['type' => 'success', 'message' => 'The data has beed saved']);
$doc->save();
return redirect("docs.index")
->with('message', ['type' => 'success', 'message' => 'The data has beed saved']);
}
public function edit(Document $doc)
{
return inertia('Document/Form', [
'types' => TypeDoc::all(),
'departments' => Department::all(),
'doc' => $doc->load(['reminders'])
'types' => Type::all(),
'categories' => Category::all(),
'doc' => $doc->load(['type', 'category'])
]);
}
public function update(Request $request, Document $doc)
{
$request->validate([
'no_doc' => 'required|string',
'company_name' => 'required|string',
'first_person_name' => 'required|string',
'second_person_name' => 'required|string',
'start_date' => 'required|date',
'end_date' => 'required|date|after_or_equal:'.$request->start_date,
'type_doc_id' => 'required|exists:type_docs,id',
'department_id' => 'required|exists:departments,id',
'pic_name' => 'required|string',
'email' => 'required|email',
'document' => 'nullable|file',
'note' => 'nullable',
'name' => 'required|string',
'status' => 'required|numeric',
]);
$doc->fill([
'no_doc' => $request->no_doc,
'name' => $request->name,
'company_name' => $request->company_name,
'first_person_name' => $request->first_person_name,
'second_person_name' => $request->second_person_name,
'start_date' => $request->start_date,
'end_date' => $request->end_date,
'pic_name' => $request->pic_name,
'email' => $request->email,
'note' => $request->note,
'type_doc_id' => $request->type_doc_id,
'department_id' => $request->department_id,
'status' => Document::UPDATE // DOCUEMENT UPDATED IS ALWAYS UPDATE
]);
$file = $request->file('document');
if ($file != null) {
$file->store('documents', 'public');
$doc->document = $file->hashName();
}
DB::beginTransaction();
$doc->save();
$doc->reminders()->delete();
if ($request->has('reminders')) {
foreach ($request->reminders as $reminder) {
$doc->reminders()->updateOrCreate(['date' => $reminder]);
}
}
DB::commit();
return redirect()->route('docs.index')
->with('message', ['type' => 'success', 'message' => 'The data has beed saved']);
//
}
public function show(Document $doc)
{
return inertia('Document/Detail', [
'doc' => $doc->load(['department', 'type', 'creator', 'reminders', 'shares']),
'doc' => $doc->load(['type', 'category']),
'doc_url' => asset('documents/'.$doc->document),
]);
}
public function export(Request $request)
{
$query = Document::with(['department', 'type', 'creator'])->orderBy('created_at');
if ($request->q != null || $request->q != '') {
$query->where(function ($query) use ($request) {
$query->where('no_doc', 'like', '%'.$request->q.'%')
->orWhere('company_name', 'like', '%'.$request->q.'%')
->orWhere('pic_name', 'like', '%'.$request->q.'%')
->orWhere('email', 'like', '%'.$request->q.'%');
});
}
if ($request->department_id != '') {
$query->where('department_id', $request->department_id);
}
if ($request->status != '') {
$query->where('status', $request->status);
}
if ($request->type_doc_id != '') {
$query->where('type_doc_id', $request->type_doc_id);
}
$collections = collect([]);
foreach ($query->get() as $document) {
$collections->add([
'no dokumen' => $document->no_doc,
'nama' => $document->name,
'jenis dokumen' => $document->type->name,
'nama perusahaan' => $document->company_name,
'nama pihak pertama' => $document->first_person_name,
'nama pihak kedua' => $document->second_person_name,
'tanggal mulai' => $document->start_date,
'tanggal selesai' => $document->end_date,
'department' => $document->department->name,
'nama pic' => $document->pic_name,
'email' => $document->email,
'catata' => $document->note,
'status' => $document->status,
'user_creator' => $document->creator->name,
]);
}
$date = now()->format('d-m-y');
$header_style = (new StyleBuilder())->setFontBold()->build();
return (new FastExcel($collections))
->headerStyle($header_style)
->download("documents-$date.xlsx");
}
public function share(Request $request, Document $doc)
{
$request->validate([
'shares' => 'array',
'shares.*.share_to' => 'required|email'
]);
DB::beginTransaction();
$doc->shares()->delete();
foreach ($request->shares as $share) {
$user = User::where('email', $share['share_to'])->first();
if ($user != null) {
$doc->shares()->updateOrCreate(['user_id' => $user->id, 'share_to' => $share['share_to']]);
} else {
$doc->shares()->updateOrCreate(['share_to' => $share['share_to']]);
}
Mail::to($share['share_to'])->queue(new DocumentShare($doc));
}
DB::commit();
return redirect()->route('docs.index')
->with('message', ['type' => 'success', 'message' => 'Document success shared']);
}
public function destroy(Document $doc)
{
$doc->shares()->delete();
$doc->reminders()->delete();
$doc->delete();
return redirect()->back();
}
}

@ -9,6 +9,12 @@ class Document extends Model
{
use HasFactory;
const STATUS_YES = 1;
const STATUS_NO = 0;
const TYPE_TETAP = 1;
const TYPE_TIDAK_TETAP = 0;
protected $fillable = [
"no",
"no_doc",
@ -37,4 +43,14 @@ class Document extends Model
{
return $this->belongsTo(User::class, 'user_id');
}
public function type()
{
return $this->belongsTo(Type::class, 'type_id');
}
public function category()
{
return $this->belongsTo(Category::class, 'category_id');
}
}

@ -1,40 +1,35 @@
import React, { useEffect, useRef, useState } from 'react'
import { Link, Head, useForm } from '@inertiajs/react'
import React, { useEffect, useRef } from 'react'
import { Link, Head, useForm, usePage } from '@inertiajs/react'
import { toast } from 'react-toastify'
import { statuses } from '@/utils'
import { useModalState } from '@/Hooks'
import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout'
import PrimaryButton from '@/Components/PrimaryButton'
import InputLabel from '@/Components/InputLabel'
import TextInput from '@/Components/TextInput'
import InputError from '@/Components/InputError'
import InputFile from '@/Components/InputFile'
import ModalReminder from './ModalReminder'
import { IconCross } from '@/Icons'
export default function FormDocument(props) {
const inputDocument = useRef()
const { types, departments, doc }= props
const { types, categories, doc }= props
const { props: {auth: { user }} } = usePage()
const [reminders, setReminders] = useState([])
const { data, setData, post, processing, errors, reset } = useForm({
const { data, setData, post, processing, errors } = useForm({
no_doc: '',
name: '',
email: '',
type_doc_id: '1',
department_id: '1',
company_name: '',
first_person_name: '',
second_person_name: '',
start_date: '',
end_date: '',
pic_name: '',
note: '',
type_id: '',
category_id: '',
publisher: '',
description: '',
publish_date: '',
due_date: '',
status: 0,
type: 0,
group: user.group,
region: user.region,
document: null,
document_name: '',
status: 0,
reminders: []
});
useEffect(() => {
@ -42,37 +37,23 @@ export default function FormDocument(props) {
setData({
no_doc: doc.no_doc,
name: doc.name,
email: doc.email,
type_doc_id: doc.type_doc_id,
department_id: doc.department_id,
company_name: doc.company_name,
first_person_name: doc.first_person_name,
second_person_name: doc.second_person_name,
start_date: doc.start_date,
end_date: doc.end_date,
pic_name: doc.pic_name,
note: doc.note,
type_id: doc.type_id,
category_id: doc.category_id,
publisher: doc.publisher,
description: doc.description,
publish_date: doc.publish_date,
due_date: doc.due_date,
status: doc.status,
type: doc.type,
group: doc.group,
region: doc.region,
document: null,
document_name: doc.document,
status: doc.status,
reminders: doc.reminders.map(r => r.date)
})
setReminders(doc.reminders.map(r => r.date))
}
}, [doc]);
const reminderModal = useModalState(false)
const handleAddReminder = (date) => {
setReminders(reminders.concat(date))
setData('reminders', reminders.concat(date))
}
const handleRemoveReminder = (index) => {
const r = reminders.filter((_, i) => i !== index)
setReminders(r)
setData('reminders', r)
}
const onHandleChange = (event) => {
setData(event.target.name, event.target.type === 'checkbox' ? event.target.checked : event.target.value);
};
@ -119,21 +100,37 @@ export default function FormDocument(props) {
/>
<InputError message={errors.no_doc}/>
</div>
<div className='mt-4'>
<div className='mt-4 pl-1'>
<InputLabel forInput="type" value="Jenis" />
<select
className="mt-1 select select-bordered w-full"
name="type_doc_id"
name="type_id"
onChange={onHandleChange}
value={data.type_doc_id}
value={data.type_id}
>
<option selected disabled></option>
{types.map(type => (
<option key={type.id} value={type.id}>{type.name}</option>
))}
</select>
<InputError message={errors.type_doc_id}/>
<InputError message={errors.type_id}/>
</div>
<div>
<div className='mt-4 pl-1'>
<InputLabel forInput="category" value="Ketegori" />
<select
className="mt-1 select select-bordered w-full"
name="category_id"
onChange={onHandleChange}
value={data.category_id}
>
<option selected disabled></option>
{categories.map(category => (
<option key={category.id} value={category.id}>{category.name}</option>
))}
</select>
<InputError message={errors.category_id}/>
</div>
<div className='mt-4'>
<InputLabel forInput="name" value="Nama Dokumen" />
<TextInput
type="text"
@ -147,122 +144,81 @@ export default function FormDocument(props) {
<InputError message={errors.name}/>
</div>
<div className='mt-4'>
<InputLabel forInput="company_name" value="Nama Perusahaan" />
<InputLabel forInput="publisher" value="Penerbit" />
<TextInput
type="text"
name="company_name"
value={data.company_name}
name="publisher"
value={data.publisher}
className="mt-1 block w-full"
autoComplete={"false"}
handleChange={onHandleChange}
isError={errors.company_name}
isError={errors.publisher}
/>
<InputError message={errors.company_name}/>
<InputError message={errors.publisher}/>
</div>
<div className='mt-4'>
<InputLabel forInput="first_person_name" value="Nama Pihak Pertama" />
<InputLabel forInput="company_name" value="Nama Perusahaan" />
<TextInput
type="text"
name="first_person_name"
value={data.first_person_name}
name="company_name"
value={data.company_name}
className="mt-1 block w-full"
autoComplete={"false"}
handleChange={onHandleChange}
isError={errors.first_person_name}
isError={errors.company_name}
/>
<InputError message={errors.first_person_name}/>
<InputError message={errors.company_name}/>
</div>
<div className='mt-4'>
<InputLabel forInput="second_person_name" value="Nama Pihak Kedua" />
<TextInput
type="text"
name="second_person_name"
value={data.second_person_name}
className="mt-1 block w-full"
autoComplete={"false"}
handleChange={onHandleChange}
isError={errors.second_person_name}
/>
<InputError message={errors.second_person_name}/>
<div className="flex w-80 justify-between items-center">
<InputLabel value="Tipe" />
<label className="label cursor-pointer gap-2 pl-20">
<span className="label-text">Tetap</span>
<input type="radio" name="type" onChange={onHandleChange} value="1" className="radio" checked={+data.type == 1} />
</label>
<label className="label cursor-pointer gap-2">
<span className="label-text">Tidak Tetap</span>
<input type="radio" name="type" onChange={onHandleChange} value="0" className="radio" checked={+data.type == 0} />
</label>
</div>
</div>
<div className='mt-4'>
<InputLabel forInput="start_date" value="Tanggal Mulai" />
<InputLabel forInput="publish_date" value="Tanggal Terbit" />
<TextInput
type="date"
name="start_date"
value={data.start_date}
name="publish_date"
value={data.publish_date}
className="mt-1 block w-full"
autoComplete={"false"}
handleChange={onHandleChange}
isError={errors.start_date}
isError={errors.publish_date}
/>
<InputError message={errors.start_date}/>
<InputError message={errors.publish_date}/>
</div>
<div className='mt-4'>
<InputLabel forInput="end_date" value="Tanggal Berakhir" />
<InputLabel forInput="due_date" value="Tanggal Jatuh Tempo" />
<TextInput
type="date"
name="end_date"
value={data.end_date}
className="mt-1 block w-full"
autoComplete={"false"}
handleChange={onHandleChange}
isError={errors.end_date}
/>
<InputError message={errors.end_date}/>
</div>
<div className='mt-4'>
<InputLabel forInput="type" value="Deparment" />
<select
className="mt-1 select select-bordered w-full"
name="department_id"
onChange={onHandleChange}
value={data.department_id}
>
{departments.map(dep => (
<option key={dep.id} value={dep.id}>{dep.name}</option>
))}
</select>
<InputError message={errors.type_doc_id}/>
</div>
<div className='mt-4'>
<InputLabel forInput="pic_name" value="Nama PIC" />
<TextInput
type="text"
name="pic_name"
value={data.pic_name}
className="mt-1 block w-full"
autoComplete={"false"}
handleChange={onHandleChange}
isError={errors.pic_name}
/>
<InputError message={errors.pic_name}/>
</div>
<div className='mt-4'>
<InputLabel forInput="email" value="Email" />
<TextInput
type="text"
name="email"
value={data.email}
name="due_date"
value={data.due_date}
className="mt-1 block w-full"
autoComplete={"false"}
handleChange={onHandleChange}
isError={errors.email}
isError={errors.due_date}
/>
<InputError message={errors.email}/>
<InputError message={errors.due_date}/>
</div>
<div className='mt-4'>
<InputLabel forInput="note" value="Catatan" />
<InputLabel forInput="description" value="Keterangan" />
<TextInput
type="textarea"
name="note"
value={data.note}
name="description"
value={data.description}
className="mt-1 block w-full"
handleChange={onHandleChange}
isError={errors.note}
isError={errors.description}
/>
<InputError message={errors.note}/>
<InputError message={errors.description}/>
</div>
<div className='mt-4'>
<InputLabel forInput="document" value="Dokumen" />
@ -277,40 +233,45 @@ export default function FormDocument(props) {
<p className='text-sm'>file saved is found, reupload to replace</p>
)}
</div>
{/* <div className='mt-4'>
<InputLabel forInput="status" value="Status" />
<select
className="mt-1 select select-bordered w-full"
name="status"
onChange={onHandleChange}
value={data.status}
>
{statuses.map(status => (
<option key={`status-${status.key}`} value={status.key}>{status.value}</option>
))}
</select>
<InputError message={errors.status}/>
</div> */}
<div className='mt-4'>
<div className='flex flex-row space-x-5 items-center'>
<InputLabel forInput="reminder" value="Reminder" />
<div className='btn btn-xs' onClick={reminderModal.toggle}>+ Tambah</div>
</div>
<div className="grid grid-cols-2 md:grid-cols-4 gap-1 mt-4">
{reminders.map((reminder, index) => (
<div className='card text-center shadow-md pt-2 pb-2 px-2 bg-blue-300' key={index}>
<div className='flex'>
<div className='flex-1'>
{reminder}
</div>
<div className="btn btn-square btn-error btn-xs" onClick={() => handleRemoveReminder(index)}>
<IconCross/>
</div>
</div>
</div>
))}
<div className="flex w-32 justify-between items-center">
<InputLabel value="Status" />
<label className="label cursor-pointer gap-2 pl-20">
<span className="label-text">Ya</span>
<input type="radio" name="status" onChange={onHandleChange} value="1" className="radio" checked={+data.status == 1} />
</label>
<label className="label cursor-pointer gap-2">
<span className="label-text">Tidak</span>
<input type="radio" name="status" onChange={onHandleChange} value="0" className="radio" checked={+data.status == 0} />
</label>
</div>
</div>
<div className='mt-4'>
<InputLabel forInput="region" value="Region" />
<TextInput
type="text"
name="region"
value={data.region}
className="mt-1 block w-full"
autoComplete={"false"}
handleChange={onHandleChange}
isError={errors.region}
/>
<InputError message={errors.region}/>
</div>
<div className='mt-4'>
<InputLabel forInput="group" value="Group" />
<TextInput
type="text"
name="group"
value={data.group}
className="mt-1 block w-full"
autoComplete={"false"}
handleChange={onHandleChange}
isError={errors.group}
/>
<InputError message={errors.group}/>
</div>
<div className="flex items-center justify-between mt-4">
<PrimaryButton processing={processing}>
Simpan
@ -325,12 +286,6 @@ export default function FormDocument(props) {
</div>
</div>
</div>
<ModalReminder
isOpen={reminderModal.isOpen}
toggle={reminderModal.toggle}
onAdd={handleAddReminder}
/>
</AuthenticatedLayout>
)
}

@ -8,11 +8,8 @@ import { useModalState } from '@/Hooks'
import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout'
import Pagination from '@/Components/Pagination'
import ModalConfirm from '@/Components/ModalConfirm'
import ModalFilter from './ModalFilter'
import ModalShare from './ModalShare'
import DocStatusItem from './DocStatusItem'
import { IconFilter, IconMenu } from '@/Icons'
import { formatDate } from '@/utils'
import { IconMenu } from '@/Icons'
import { formatDate, hasPermission } from '@/utils'
export default function Document(props) {
const { types, departments } = props
@ -36,7 +33,6 @@ export default function Document(props) {
}
}
const filterModal = useModalState(false)
const handleFilter = (filter) => {
setSearch({
...search,
@ -44,12 +40,6 @@ export default function Document(props) {
})
}
const shareModal = useModalState(false)
const handleShare = (doc) => {
shareModal.setData(doc)
shareModal.toggle()
}
const sort = (key) => {
setSearch({
...search,
@ -71,6 +61,10 @@ export default function Document(props) {
}
}, [search])
const canCreate = hasPermission('create-document', props.auth.user)
const canUpdate = hasPermission('update-document', props.auth.user)
const canDelete = hasPermission('delete-document', props.auth.user)
return (
<AuthenticatedLayout
auth={props.auth}
@ -83,12 +77,14 @@ export default function Document(props) {
<div className="card bg-base-100 w-full">
<div className="card-body">
<div className="flex flex-col md:flex-row w-full mb-4 justify-between space-y-1 md:space-y-0">
<Link
className="btn btn-neutral"
href={route('docs.create')}
>
Tambah
</Link>
{canCreate && (
<Link
className="btn btn-neutral"
href={route('docs.create')}
>
Tambah
</Link>
)}
<div className='flex flex-row'>
<div className="form-control w-full">
<input
@ -101,22 +97,18 @@ export default function Document(props) {
placeholder="Search"
/>
</div>
<div className='tooltip' data-tip="filter status etc">
<div className='btn btn-outline' onClick={() => filterModal.toggle()}>
<IconFilter/>
</div>
</div>
</div>
</div>
<div className="overflow-x-auto pb-44">
<table className="table w-full table-zebra">
<thead>
<tr>
<th className='hover:underline' onClick={() => sort('type_doc_id')}>Jenis</th>
<th className='hover:underline' onClick={() => sort('type_id')}>Jenis</th>
<th className='hover:underline' onClick={() => sort('category_id')}>Ketegori</th>
<th>No Dokumen</th>
<th>Nama Dokumen</th>
<th>Nama PIC</th>
<th className='hover:underline' onClick={() => sort('end_date')}>Tanggal Berakhir</th>
<th className='hover:underline' onClick={() => sort('status')}>Status</th>
<th className='hover:underline' onClick={() => sort('due_date')}>Tanggal Berakhir</th>
<th>Status</th>
<th></th>
</tr>
</thead>
@ -124,10 +116,11 @@ export default function Document(props) {
{docs?.map((doc) => (
<tr key={doc.id}>
<td>{doc.type.name}</td>
<td>{doc.category.name}</td>
<td>{doc.no_doc}</td>
<td>{doc.name}</td>
<td>{doc.pic_name}</td>
<td>{formatDate(doc.end_date)}</td>
<td><DocStatusItem status={doc.status}/></td>
<td>{formatDate(doc.due_date)}</td>
<th>Status</th>
<td className='text-right'>
<div className="dropdown dropdown-left">
<label tabIndex={0} className="btn btn-sm m-1 px-1"><IconMenu/></label>
@ -135,15 +128,16 @@ export default function Document(props) {
<li>
<Link href={route('docs.show', doc)}>Detail</Link>
</li>
<li onClick={() => handleShare(doc)}>
<div>Share</div>
</li>
<li>
<Link href={route('docs.edit', doc)}>Edit</Link>
</li>
<li onClick={() => handleDelete(doc)} className="bg-error ">
<div>Delete</div>
</li>
{canUpdate && (
<li>
<Link href={route('docs.edit', doc)}>Edit</Link>
</li>
)}
{canDelete && (
<li onClick={() => handleDelete(doc)} className="bg-error ">
<div>Delete</div>
</li>
)}
</ul>
</div>
</td>
@ -163,19 +157,6 @@ export default function Document(props) {
toggle={confirmModal.toggle}
onConfirm={onDelete}
/>
<ModalFilter
isOpen={filterModal.isOpen}
toggle={filterModal.toggle}
filter={search}
types={types}
departments={departments}
handleSetFilter={handleFilter}
/>
<ModalShare
isOpen={shareModal.isOpen}
toggle={shareModal.toggle}
modalState={shareModal}
/>
</AuthenticatedLayout>
)
}

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" data-theme="garden">
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" data-theme="light">
<!-- corporate -->
<head>
<meta charset="utf-8">

Loading…
Cancel
Save