161 lines
5.4 KiB
Vue
161 lines
5.4 KiB
Vue
<script setup>
|
|
import { computed, ref } from 'vue';
|
|
import { useForm } from '@inertiajs/inertia-vue3';
|
|
import Input from '../../Share/Components/Input.vue';
|
|
|
|
const categories = ref([]);
|
|
|
|
const categoryToString = computed({
|
|
get: () => categories.value.join(', '),
|
|
set: (val) => {
|
|
val = val.replace(', ', ',').replace(' , ', ',').replace(' ,', ',');
|
|
val = val.split(',');
|
|
val.forEach((element, key) => {
|
|
element = element.trim();
|
|
val[key] = slug(element);
|
|
});
|
|
categories.value = val;
|
|
}
|
|
});
|
|
|
|
const form = useForm({
|
|
title: null,
|
|
author: null,
|
|
categories: categoryToString,
|
|
release_date: null,
|
|
update_date: null,
|
|
image_small: null,
|
|
image_medium: null,
|
|
image_large: null,
|
|
project_url: null,
|
|
project_version: null,
|
|
description: null,
|
|
visible: Boolean(false),
|
|
});
|
|
|
|
function createProject() {
|
|
form.post('/dashboard/project');
|
|
}
|
|
|
|
function slug(str) {
|
|
str = str.replace(/^\s+|\s+$/g, ''); // trim
|
|
str = str.toLowerCase();
|
|
|
|
// remove accents, swap ñ for n, etc
|
|
var from = "ãàáäâẽèéëêìíïîõòóöôùúüûñç·/_,:;";
|
|
var to = "aaaaaeeeeeiiiiooooouuuunc------";
|
|
for (var i = 0, l = from.length; i < l; i++) {
|
|
str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));
|
|
}
|
|
|
|
str = str.replace(/[^a-z0-9 -]/g, '') // remove invalid chars
|
|
.replace(/\s+/g, '-') // collapse whitespace and replace by -
|
|
.replace(/-+/g, '-'); // collapse dashes
|
|
|
|
return str;
|
|
};
|
|
</script>
|
|
|
|
<template>
|
|
<InertiaHead title="Nowy projekt" />
|
|
<div class="p-4">
|
|
<header class="pb-4">
|
|
<div class="flex items-center gap-2">
|
|
<InertiaLink
|
|
as="button"
|
|
href="/dashboard"
|
|
class="px-2 text-xl text-gray-700 hover:text-black"
|
|
title="Wróc do dashboard"><FontAwesomeIcon :icon="['fas', 'caret-left']" /></InertiaLink>
|
|
<h1 class="text-3xl font-roboto font-light">Nowy projekt</h1>
|
|
</div>
|
|
</header>
|
|
<div>
|
|
<form class="flex flex-col gap-4" @submit.prevent="createProject">
|
|
<Input
|
|
id="title"
|
|
label="Tytuł"
|
|
placeholder="Nazwa projektu"
|
|
v-model="form.title"
|
|
:error="form.errors.title"
|
|
/>
|
|
<Input
|
|
id="author"
|
|
label="Autor"
|
|
placeholder="Imię i nazwisko"
|
|
v-model="form.author"
|
|
:error="form.errors.author"
|
|
/>
|
|
<Input
|
|
id="categories"
|
|
label="Kategorie"
|
|
placeholder="Kategorie projektu"
|
|
v-model="form.categories"
|
|
:error="form.errors.categories"
|
|
/>
|
|
<Input
|
|
id="release_date"
|
|
label="Data pierwszego wydania"
|
|
type="date"
|
|
v-model="form.release_date"
|
|
:error="form.errors.release_date"
|
|
/>
|
|
<Input
|
|
id="update_date"
|
|
label="Data aktualizacji"
|
|
type="date"
|
|
v-model="form.update_date"
|
|
:error="form.errors.update_date"
|
|
/>
|
|
<Input
|
|
id="image_small"
|
|
label="Zdjęcie projekty - małe"
|
|
v-model="form.image_small"
|
|
:error="form.errors.image_small"
|
|
/>
|
|
<Input
|
|
id="image_medium"
|
|
label="Zdjęcie projekty - średnie"
|
|
v-model="form.image_medium"
|
|
:error="form.errors.image_medium"
|
|
/>
|
|
<Input
|
|
id="image_large"
|
|
label="Zdjęcie projekty - duże"
|
|
v-model="form.image_large"
|
|
:error="form.errors.image_large"
|
|
/>
|
|
<Input
|
|
id="project_url"
|
|
label="Adres projektu"
|
|
placeholder="Adres www strony projektu"
|
|
v-model="form.project_url"
|
|
:error="form.errors.project_url"
|
|
/>
|
|
<Input
|
|
id="project_version"
|
|
label="Wersja projektu"
|
|
placeholder="v1.0.0"
|
|
v-model="form.project_version"
|
|
:error="form.errors.project_version"
|
|
/>
|
|
<Input
|
|
id="description"
|
|
label="Opis"
|
|
type="textarea"
|
|
placeholder="Ładny opis"
|
|
v-model="form.description"
|
|
:error="form.errors.description"
|
|
textareaHeight="200px"
|
|
/>
|
|
<Input
|
|
id="visible"
|
|
label="Widoczny"
|
|
type="checkbox"
|
|
v-model="form.visible"
|
|
/>
|
|
<button class="px-0.5 py-1 rounded-lg bg-[#436da7] border-4 border-[#436da7] text-white text-lg hover:bg-transparent hover:text-[#436da7]">Dodaj projekt</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</template>
|