This commit is contained in:
Thomas Peterson 2024-09-22 10:50:09 +02:00
parent 8d9e79c3bd
commit 22af78dcaa
112 changed files with 699772 additions and 1508 deletions

View File

@ -2,7 +2,7 @@ ARG BASE_IMAGE
FROM ${BASE_IMAGE} as base FROM ${BASE_IMAGE} as base
RUN apt update && apt install -y \ RUN apt update && apt install -y \
sqlite3 sqlite3 mariadb-client
FROM base as prod FROM base as prod

2
.gitignore vendored
View File

@ -3,7 +3,7 @@
.idea .idea
/phpstorm.yml /phpstorm.yml
.DS_Store .DS_Store
.php-cs-fixer.cache
src/new/web/bundles/ src/new/web/bundles/
src/new/web/css/ src/new/web/css/
src/new/app/bootstrap.php.cache src/new/app/bootstrap.php.cache

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
define(function() { define(function() {
const Order_List_Detail = ({ uuid, basketField1, customerInfo, basketField2, pos, price, product, status, allNet }, orderUuid) => ` const Order_List_Detail = ({ uuid, basketField1, customerInfo, basketField2, pos, price, product, status, allNet, reOrder, reOrderOrder, reOrderPos }, orderUuid) => `
<div style="${psc.order.get_pos_bg_color(status)}" class="row ${psc.order.get_pos_bg_color_class(status)}" id="row-${uuid}"> <div style="${psc.order.get_pos_bg_color(status)}" class="row ${psc.order.get_pos_bg_color_class(status)}" id="row-${uuid}">
<div class="col-1 p-1">${pos}</div> <div class="col-1 p-1">${pos}</div>
<div class="col-4 p-1"> <div class="col-4 p-1">
@ -9,7 +9,7 @@ define(function() {
<br/>ArtNr intern: ${product.nrIntern}<br/> <br/>ArtNr intern: ${product.nrIntern}<br/>
${psc.order.get_special_product_options(product.specialProductTypeObject)}</div> ${psc.order.get_special_product_options(product.specialProductTypeObject)}</div>
<div class="col-1 p-1">Auflage: ${price.count}</div> <div class="col-1 p-1">Auflage: ${price.count}</div>
<div class="col-1 p-1">Kunden Info: ${customerInfo}</div> <div class="col-1 p-1">Kunden Info: ${customerInfo}${(reOrder? `<br/><strong>Ist eine Nachbestellung</strong>`:``)}</div>
<div class="col-1 p-1">${basketField1}</div> <div class="col-1 p-1">${basketField1}</div>
<div class="col-1 p-1">${basketField2}</div> <div class="col-1 p-1">${basketField2}</div>
<div class="col-1 p-1 text-end">${new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(price.allNet/100)} <strong>(${new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(price.allGross/100)})</strong></div> <div class="col-1 p-1 text-end">${new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(price.allNet/100)} <strong>(${new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(price.allGross/100)})</strong></div>

1
src/new/assets/backend/login.d.ts vendored Normal file
View File

@ -0,0 +1 @@
import "./login/login.css";

View File

@ -0,0 +1 @@
import "./login/login.css"

View File

@ -0,0 +1,21 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer components {
.psc-login-page {
@apply relative bg-no-repeat;
background-image: radial-gradient(
circle at top,
theme('colors.psc.50'),
theme('colors.white') 50%
);
}
.psc-login-page form::before {
@apply absolute inset-x-0 mx-auto h-px w-2/3 bg-gradient-to-r from-gray-200 via-psc-300 to-gray-200;
content: '';
z-index: 1;
top: -1px;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
HostUrl=https://gitlab.com/

656
src/new/composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -2,12 +2,25 @@
declare(strict_types=1); declare(strict_types=1);
use PSC\Shop\OrderBundle\Service\Order;
use PSC\System\SettingsBundle\Service\Instance; use PSC\System\SettingsBundle\Service\Instance;
use PSC\System\SettingsBundle\Service\Shop; use PSC\System\SettingsBundle\Service\Shop;
use PSC\System\SettingsBundle\Service\Token; use PSC\System\SettingsBundle\Service\Token;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use function Symfony\Component\DependencyInjection\Loader\Configurator\service; use function Symfony\Component\DependencyInjection\Loader\Configurator\service;
return static function (ContainerConfigurator $containerConfigurator): void { return static function (ContainerConfigurator $containerConfigurator): void {
$containerConfigurator->extension('twig', ['default_path' => '%kernel.project_dir%/templates', 'form_themes' => ['bootstrap_5_layout.html.twig'], 'globals' => ['instanceService' => service(Instance::class), 'shopService' => service(Shop::class), 'tokenService' => service(Token::class)]]); $containerConfigurator->extension(
'twig',
['default_path' => '%kernel.project_dir%/templates',
'form_themes' => ['bootstrap_5_layout.html.twig'],
'globals' => [
'instanceService' => service(Instance::class),
'shopService' => service(Shop::class),
'orderService' => service(Order::class),
'tokenService' => service(Token::class)
]
]
);
}; };

2973
src/new/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,16 +1,24 @@
{ {
"devDependencies": { "devDependencies": {
"@babel/preset-react": "^7.24.7",
"@hotwired/stimulus": "^3.2.2", "@hotwired/stimulus": "^3.2.2",
"@symfony/stimulus-bridge": "^3.2.2", "@symfony/stimulus-bridge": "^3.2.2",
"@symfony/ux-autocomplete": "file:vendor/symfony/ux-autocomplete/assets", "@symfony/ux-autocomplete": "file:vendor/symfony/ux-autocomplete/assets",
"@symfony/ux-chartjs": "file:vendor/symfony/ux-chartjs/assets", "@symfony/ux-chartjs": "file:vendor/symfony/ux-chartjs/assets",
"@symfony/ux-live-component": "file:vendor/symfony/ux-live-component/assets", "@symfony/ux-live-component": "file:vendor/symfony/ux-live-component/assets",
"@symfony/webpack-encore": "4.2.0", "@symfony/webpack-encore": "4.2.0",
"@tailwindcss/aspect-ratio": "^0.4.2",
"@tailwindcss/container-queries": "^0.1.1",
"@tailwindcss/forms": "^0.5.9",
"@tailwindcss/typography": "^0.5.15",
"@types/node": "^18.7.6", "@types/node": "^18.7.6",
"autoprefixer": "^10.4.20",
"chart.js": "^3.4.1 || ^4.0", "chart.js": "^3.4.1 || ^4.0",
"core-js": "^3.0.0", "core-js": "^3.0.0",
"postcss": "^8.4.45",
"regenerator-runtime": "^0.13.2", "regenerator-runtime": "^0.13.2",
"sass": "^1.38.0", "sass": "^1.38.0",
"tailwindcss": "^3.4.10",
"tom-select": "^2.2.2", "tom-select": "^2.2.2",
"typescript": "^4.7.4", "typescript": "^4.7.4",
"webpack-notifier": "^1.15.0" "webpack-notifier": "^1.15.0"
@ -37,6 +45,7 @@
"morris.js": "^0.5.0", "morris.js": "^0.5.0",
"multiselect": "^0.9.12", "multiselect": "^0.9.12",
"multiselect-two-sides": "^2.5.7", "multiselect-two-sides": "^2.5.7",
"postcss-loader": "^7.0.0",
"raphael": "^2.3.0", "raphael": "^2.3.0",
"summernote": "^0.8.20" "summernote": "^0.8.20"
} }

View File

@ -0,0 +1,7 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}

View File

@ -4,3 +4,7 @@ psc_backend_dashboard:
Layout: Layout Layout: Layout
UID: UID UID: UID
UUID: UUID UUID: UUID
password: Passwort
username: Benutzername
login: Anmelden

View File

@ -4,3 +4,7 @@ psc_backend_dashboard:
Layout: Layout Layout: Layout
UID: UID UID: UID
UUID: UUID UUID: UUID
password: Password
username: Username
login: Login

View File

@ -1,42 +1,21 @@
{% extends 'backend_noauth.html.twig' %} {% extends 'backend_login.html.twig' %}
{% block body %} {% block body %}
<div class="panel"> <div class="p-8 space-y-4 bg-white/50 backdrop-blur-xl border border-gray-200 shadow-2xl rounded-2xl relative">
<div class="body">
{% if error %} {% if error %}
<div>{{ error.messageKey|trans(error.messageData, 'security') }}</div> <div>{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %} {% endif %}
<pre></pre> <pre><img src="{{ asset('build/images/logo.png') }}" alt="Logo"></pre>
<form method="post"> <form method="post">
<div class="container"> <label class="text-sm font-medium leading-4 text-gray-700" for="username">{{ 'psc_backend_dashboard.username'|trans }}:</label>
<div class="row mb-3"> <input type="text" class="mt-1 block w-full rounded-lg shadow-sm outline-none border-gray-300 focus:border-psc-500 focus:ring-1 focus:ring-inset focus:ring-psc-500" id="username" name="username" value="{{ last_username }}" />
<label class="col-md-1 form-control-label"> <label class="text-sm font-medium leading-4 text-gray-700" for="password">{{ 'psc_backend_dashboard.password'|trans }}:</label>
Username: <input type="password" class="mt-1 block w-full rounded-lg shadow-sm outline-none border-gray-300 focus:border-psc-500 focus:ring-1 focus:ring-inset focus:ring-psc-500" id="password" name="password" />
</label>
<div class="col-md-11">
<input type="text" class="form-control" id="username" name="username" value="{{ last_username }}" />
</div>
</div>
<div class="row mb-3">
<label class="col-md-1 form-control-label">
Password:
</label>
<div class="col-md-11">
<input type="password" class="form-control" id="password" name="password" />
</div>
</div>
<div class="row mb-3">
<div class="col-md-offset-1 col-md-11">
<button type="submit" class="btn btn-primary btn-sm">login</button>
</div>
</div>
<button type="submit" class="mt-4 inline-flex items-center justify-center font-medium rounded-lg transition-colors min-h-[2.25rem] px-4 text-sm text-white shadow w-full bg-psc-500">{{ 'psc_backend_dashboard.login'|trans }}</button>
<input type="hidden" name="_csrf_token" <input type="hidden" name="_csrf_token"
value="{{ csrf_token('authenticate') }}" value="{{ csrf_token('authenticate') }}"
> >
</div>
</form> </form>
</div>
</div> </div>
{% endblock %} {% endblock %}

View File

@ -26,19 +26,19 @@ class Position
*/ */
#[Id] #[Id]
protected $id; protected $id;
/** /**
* @var string $uid * @var string $uid
*/ */
#[Field(type: 'string')] #[Field(type: 'string')]
protected $uid; protected $uid;
/** /**
* @var string $templatePrintId ; * @var string $templatePrintId ;
*/ */
#[Field(type: 'string')] #[Field(type: 'string')]
protected $templatePrintId; protected $templatePrintId;
/** /**
* @var string $layouterId ; * @var string $layouterId ;
*/ */
#[Field(type: 'string')] #[Field(type: 'string')]
protected $layouterId; protected $layouterId;
@ -48,6 +48,15 @@ class Position
#[Field(type: 'bool')] #[Field(type: 'bool')]
protected $downloadAllowed = false; protected $downloadAllowed = false;
#[Field(type: 'bool')]
protected $reOrder = false;
#[Field(type: 'string')]
protected $reOrderOrder;
#[Field(type: 'string')]
protected $reOrderPos;
#[Field(type: 'string')] #[Field(type: 'string')]
protected $customerInfo; protected $customerInfo;
@ -313,4 +322,34 @@ class Position
{ {
$this->downloadAllowed = $downloadAllowed; $this->downloadAllowed = $downloadAllowed;
} }
public function isReOrder(): bool
{
return (bool)$this->reOrder;
}
public function setReOrder(bool $var): void
{
$this->reOrder = $var;
}
public function getReOrderOrder(): string
{
return (string)$this->reOrderOrder;
}
public function setReOrderOrder(string $var): void
{
$this->reOrderOrder = $var;
}
public function getReOrderPos(): string
{
return (string)$this->reOrderPos;
}
public function setReOrderPos(string $var): void
{
$this->reOrderPos = $var;
}
} }

View File

@ -24,7 +24,6 @@ use OpenApi\Attributes as OA;
class Position class Position
{ {
#[OA\Property(type: 'integer')] #[OA\Property(type: 'integer')]
private int $pos = 1; private int $pos = 1;
@ -52,6 +51,15 @@ class Position
#[OA\Property(type: 'boolean')] #[OA\Property(type: 'boolean')]
private bool $copyProduct = false; private bool $copyProduct = false;
#[OA\Property(type: 'boolean')]
private bool $reOrder = false;
#[OA\Property(type: 'string')]
private string $reOrderOrder = "";
#[OA\Property(type: 'string')]
private string $reOrderPos = "";
#[OA\Property(type: 'boolean')] #[OA\Property(type: 'boolean')]
private bool $downloadAllowed = false; private bool $downloadAllowed = false;
@ -270,6 +278,36 @@ class Position
$this->downloadAllowed = $downloadAllowed; $this->downloadAllowed = $downloadAllowed;
} }
public function isReOrder(): bool
{
return $this->reOrder;
}
public function setReOrder(bool $var): void
{
$this->reOrder = $var;
}
public function getReOrderOrder(): string
{
return $this->reOrderOrder;
}
public function setReOrderOrder(string $var): void
{
$this->reOrderOrder = $var;
}
public function getReOrderPos(): string
{
return $this->reOrderPos;
}
public function setReOrderPos(string $var): void
{
$this->reOrderPos = $var;
}
public function getLayouterMode(): int public function getLayouterMode(): int
{ {
return $this->layouterMode; return $this->layouterMode;
@ -300,7 +338,7 @@ class Position
$this->trackings = $trackings; $this->trackings = $trackings;
} }
public function addTracking(Tracking $tracking):void public function addTracking(Tracking $tracking): void
{ {
$this->trackings[] = $tracking; $this->trackings[] = $tracking;
} }

View File

@ -551,7 +551,7 @@ span.row {
{% endfor %} {% endfor %}
</td> </td>
<td colspan="5"><div class="row"><div class="col-6">{{ form_start(pos.formProd) }}{{ form_widget(pos.formProd.printPartnerEmail) }}{{ form_rest(pos.formProd) }}</div><div class="col-6"><button class="btn btn-info btn-sm" type="submit">Printpartner benachrichtigen</button></div>{{ form_end(pos.formProd) }}<br /><br /><div class="col-6">{{ form_start(pos.formProdinfo) }}{{ form_widget(pos.formProdinfo.customerInfo) }}{{ form_rest(pos.formProdinfo) }}</div><div class="col-6"><button class="btn btn-info btn-sm" type="submit">Dem Kunden zeigen</button></div>{{ form_end(pos.formProdinfo) }}</td> <td colspan="5"><div class="row"><div class="col-6">{{ form_start(pos.formProd) }}{{ form_widget(pos.formProd.printPartnerEmail) }}{{ form_rest(pos.formProd) }}</div><div class="col-6"><button class="btn btn-info btn-sm" type="submit">Printpartner benachrichtigen</button></div>{{ form_end(pos.formProd) }}<br /><br /><div class="col-6">{{ form_start(pos.formProdinfo) }}{{ form_widget(pos.formProdinfo.customerInfo) }}{{ form_rest(pos.formProdinfo) }}</div><div class="col-6"><button class="btn btn-info btn-sm" type="submit">Dem Kunden zeigen</button></div>{{ form_end(pos.formProdinfo) }}{% if posModel.reOrder %}{% set reOrderModel = orderService.getOrderByUuid(posModel.reOrderOrder, true) %}<p><strong>Ist eine Nachbestellung vom Auftrag:<br/>{{ reOrderModel.alias }} vom: {{ reOrderModel.created|date("d.m.Y") }} </strong></p>{% endif %}</td>
</tr> </tr>
<tr> <tr>
<td colspan="10"> <td colspan="10">

View File

@ -73,16 +73,16 @@ class Order
$this->calcService->calcOrder($order); $this->calcService->calcOrder($order);
if ($order->getUid() != 0) { if ($order->getUid() != 0) {
$this->updateOrder($order); $this->updateOrder($order);
}elseif ($order->getUuid() != "" && $uid = $this->checkIfOrderUuidExists($order)) { } elseif ($order->getUuid() != "" && $uid = $this->checkIfOrderUuidExists($order)) {
$order->setUid($uid); $order->setUid($uid);
$this->updateOrder($order); $this->updateOrder($order);
} else { } else {
if($order->getAlias() != "") { if ($order->getAlias() != "") {
$result = $this->checkIfOrderExists($order); $result = $this->checkIfOrderExists($order);
if ($result === false) { if ($result === false) {
$this->newOrder($order); $this->newOrder($order);
} }
}else{ } else {
$this->newOrder($order); $this->newOrder($order);
} }
} }
@ -143,19 +143,19 @@ class Order
$positionUsed = []; $positionUsed = [];
$i = 1; $i = 1;
foreach ($order->getPositions() as $position) { foreach ($order->getPositions() as $position) {
if($position->getUuid()) { if ($position->getUuid()) {
/** /**
* @var Orderpos $positionEntity * @var Orderpos $positionEntity
*/ */
$positionEntity = $posRepo->findOneBy(array('uuid' => (string)$position->getUuid())); $positionEntity = $posRepo->findOneBy(array('uuid' => (string)$position->getUuid()));
}else { } else {
/** /**
* @var Orderpos $positionEntity * @var Orderpos $positionEntity
*/ */
$positionEntity = $posRepo->findOneBy(array('id' => (string)$position->getUid())); $positionEntity = $posRepo->findOneBy(array('id' => (string)$position->getUid()));
} }
$position->setPos($i); $position->setPos($i);
if(!$positionEntity) { if (!$positionEntity) {
$positionEntity = new Orderpos(); $positionEntity = new Orderpos();
$positionDoc = new \PSC\Shop\EntityBundle\Document\Position(); $positionDoc = new \PSC\Shop\EntityBundle\Document\Position();
$positionEntity->setOrder($orderEntity); $positionEntity->setOrder($orderEntity);
@ -167,12 +167,12 @@ class Order
$this->mongoManager->persist($positionDoc); $this->mongoManager->persist($positionDoc);
}else{ } else {
/** /**
* @var \PSC\Shop\EntityBundle\Document\Position $positionDoc * @var \PSC\Shop\EntityBundle\Document\Position $positionDoc
*/ */
$positionDoc = $posDocRepo->findOneBy(array('uid' => (string)$positionEntity->getUid())); $positionDoc = $posDocRepo->findOneBy(array('uid' => (string)$positionEntity->getUid()));
if(!$positionDoc) { if (!$positionDoc) {
$positionDoc = new \PSC\Shop\EntityBundle\Document\Position(); $positionDoc = new \PSC\Shop\EntityBundle\Document\Position();
$positionDoc->setUid($positionEntity->getUid()); $positionDoc->setUid($positionEntity->getUid());
} }
@ -188,14 +188,14 @@ class Order
$positions = $posRepo->findBy(array('order' => $orderEntity)); $positions = $posRepo->findBy(array('order' => $orderEntity));
foreach($positions as $position) { foreach ($positions as $position) {
if(!in_array($position->getUuid(), $positionUsed)) { if (!in_array($position->getUuid(), $positionUsed)) {
/** /**
* @var \PSC\Shop\EntityBundle\Document\Position $positionDoc * @var \PSC\Shop\EntityBundle\Document\Position $positionDoc
*/ */
$positionDoc = $posDocRepo->findOneBy(array('uid' => (string)$position->getUid())); $positionDoc = $posDocRepo->findOneBy(array('uid' => (string)$position->getUid()));
if($positionDoc) { if ($positionDoc) {
$this->mongoManager->remove($positionDoc); $this->mongoManager->remove($positionDoc);
} }
$this->entityManager->remove($position); $this->entityManager->remove($position);
@ -254,10 +254,10 @@ class Order
$order->setUuid(Uuid::uuid7()); $order->setUuid(Uuid::uuid7());
$order->setUid(0); $order->setUid(0);
$order->setAlias(""); $order->setAlias("");
if($typ != 0) { if ($typ != 0) {
$order->setType($typ); $order->setType($typ);
} }
foreach($order->getPositions() as $position) { foreach ($order->getPositions() as $position) {
$position->setUuid(Uuid::uuid7()); $position->setUuid(Uuid::uuid7());
$position->setUid(0); $position->setUid(0);
} }
@ -295,7 +295,7 @@ class Order
* @var \PSC\Shop\EntityBundle\Entity\Order $orderEntity * @var \PSC\Shop\EntityBundle\Entity\Order $orderEntity
*/ */
$orderEntity = $orderRepo->findOneBy(array('uuid' => $uuid)); $orderEntity = $orderRepo->findOneBy(array('uuid' => $uuid));
if($this->currentOrder && $this->currentOrder->getUuid() === $uuid) { if ($this->currentOrder && $this->currentOrder->getUuid() === $uuid) {
return $this->currentOrder; return $this->currentOrder;
} }
return $this->parseToModel($orderEntity); return $this->parseToModel($orderEntity);
@ -385,7 +385,7 @@ class Order
if ($orderDoc) { if ($orderDoc) {
$this->orderTransformer->fromDb($this->currentOrder, $orderEntity, $orderDoc); $this->orderTransformer->fromDb($this->currentOrder, $orderEntity, $orderDoc);
}else{ } else {
$this->orderTransformer->fromDb($this->currentOrder, $orderEntity, new \PSC\Shop\EntityBundle\Document\Order()); $this->orderTransformer->fromDb($this->currentOrder, $orderEntity, new \PSC\Shop\EntityBundle\Document\Order());
} }
@ -405,7 +405,7 @@ class Order
->findOneBy(array('uid' => (string)$pos->getUid())); ->findOneBy(array('uid' => (string)$pos->getUid()));
if ($positionDoc) { if ($positionDoc) {
$this->positionTransformer->fromDb($position, $pos, $positionDoc); $this->positionTransformer->fromDb($position, $pos, $positionDoc);
}else{ } else {
$this->positionTransformer->fromDb($position, $pos, new \PSC\Shop\EntityBundle\Document\Position()); $this->positionTransformer->fromDb($position, $pos, new \PSC\Shop\EntityBundle\Document\Position());
} }

View File

@ -124,8 +124,9 @@ class Position extends Base
$position->getPrice()->setAllVat($pos->getPriceAllSteuer() * 100); $position->getPrice()->setAllVat($pos->getPriceAllSteuer() * 100);
$position->getPrice()->setGross($pos->getPriceOneBrutto() * 100); $position->getPrice()->setGross($pos->getPriceOneBrutto() * 100);
$position->getPrice()->setAllGross($pos->getPriceAllBrutto() * 100); $position->getPrice()->setAllGross($pos->getPriceAllBrutto() * 100);
$position->setReOrder($positionDoc->isReOrder());
$position->setReOrderOrder($positionDoc->getReOrderOrder());
$position->setReOrderPos($positionDoc->getReOrderPos());
$position->setStatus($pos->getStatus()); $position->setStatus($pos->getStatus());
$position->setData($pos->getData()); $position->setData($pos->getData());
$position->setDownloadAllowed($positionDoc->isDownloadAllowed()); $position->setDownloadAllowed($positionDoc->isDownloadAllowed());

View File

@ -0,0 +1,34 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
darkMode: 'class',
content: [
"./assets/**/*.{js,ts}",
"./templates/**/*.html.twig",
"./src/PSC/**/**/Resources/views/**/*.html.twig"
],
theme: {
extend: {
colors: {
psc: {
DEFAULT: '#EA641b',
50: '#eeb4af',
100: '#e89a93',
200: '#e28077',
300: '#dc665b',
400: '#d64c3f',
500: '#EA641b',
600: '#ac3025',
700: '#90281f',
800: '#742019',
900: '#581913',
}
}
},
},
plugins: [
require('@tailwindcss/typography'),
require('@tailwindcss/forms'),
require('@tailwindcss/aspect-ratio'),
require('@tailwindcss/container-queries'),
],
}

View File

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html lang="de-DE">
<head>
<meta charset="utf-8">
<title>PSC Admin</title>
<meta name="description" content="">
<meta name="author" content="">
<base href="{{ app.request.getBaseURL() }}/"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
{% block stylesheets %}
{{ encore_entry_link_tags('backend/login') }}
{% endblock %}
</head>
<body class="min-h-screen bg-gray-100 text-gray-900 overflow-y-auto">
<div class="flex items-center justify-center min-h-screen bg-gray-100 text-gray-900 py-12 psc-login-page">
{% block body %}
{% endblock %}
</div>
{% block javascripts %}
{{ encore_entry_script_tags('backend/login') }}
{% endblock %}
</body>
</html>

View File

@ -1,7 +1,25 @@
{ {
"compilerOptions": { "compilerOptions": {
"jsx": "preserve", // "jsx": "preserve",
"module": "commonjs", // "module": "commonjs",
"experimentalDecorators": true "experimentalDecorators": true,
"emitDecoratorMetadata": true,
"module": "esnext",
"target": "es5",
"lib": ["es6", "dom", "es2016", "es2017"],
"jsx": "react",
"declaration": false,
"moduleResolution": "node",
"noUnusedLocals": true,
"noUnusedParameters": true,
"esModuleInterop": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noImplicitAny": true,
"strictNullChecks": true,
"suppressImplicitAnyIndexErrors": true,
"sourceMap": false,
"allowSyntheticDefaultImports": true
} }
} }

View File

@ -39,6 +39,8 @@
"zustand": "^4.5.2" "zustand": "^4.5.2"
}, },
"devDependencies": { "devDependencies": {
"@types/jquery": "^3.5.30",
"@types/uuid": "^10.0.0",
"autoprefixer": "^10.4.19", "autoprefixer": "^10.4.19",
"postcss": "^8.4.38", "postcss": "^8.4.38",
"tailwindcss": "^3.4.3" "tailwindcss": "^3.4.3"
@ -489,6 +491,16 @@
"hoist-non-react-statics": "^3.3.0" "hoist-non-react-statics": "^3.3.0"
} }
}, },
"node_modules/@types/jquery": {
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.30.tgz",
"integrity": "sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/sizzle": "*"
}
},
"node_modules/@types/parse-json": { "node_modules/@types/parse-json": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
@ -524,6 +536,13 @@
"@types/react": "*" "@types/react": "*"
} }
}, },
"node_modules/@types/sizzle": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz",
"integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/styled-components": { "node_modules/@types/styled-components": {
"version": "5.1.34", "version": "5.1.34",
"resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.34.tgz", "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.34.tgz",
@ -539,6 +558,13 @@
"resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz",
"integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==" "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw=="
}, },
"node_modules/@types/uuid": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz",
"integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@vtaits/use-lazy-ref": { "node_modules/@vtaits/use-lazy-ref": {
"version": "0.1.3", "version": "0.1.3",
"resolved": "https://registry.npmjs.org/@vtaits/use-lazy-ref/-/use-lazy-ref-0.1.3.tgz", "resolved": "https://registry.npmjs.org/@vtaits/use-lazy-ref/-/use-lazy-ref-0.1.3.tgz",
@ -3203,6 +3229,15 @@
"hoist-non-react-statics": "^3.3.0" "hoist-non-react-statics": "^3.3.0"
} }
}, },
"@types/jquery": {
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.30.tgz",
"integrity": "sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==",
"dev": true,
"requires": {
"@types/sizzle": "*"
}
},
"@types/parse-json": { "@types/parse-json": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
@ -3238,6 +3273,12 @@
"@types/react": "*" "@types/react": "*"
} }
}, },
"@types/sizzle": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz",
"integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==",
"dev": true
},
"@types/styled-components": { "@types/styled-components": {
"version": "5.1.34", "version": "5.1.34",
"resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.34.tgz", "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.34.tgz",
@ -3253,6 +3294,12 @@
"resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz",
"integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==" "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw=="
}, },
"@types/uuid": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz",
"integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==",
"dev": true
},
"@vtaits/use-lazy-ref": { "@vtaits/use-lazy-ref": {
"version": "0.1.3", "version": "0.1.3",
"resolved": "https://registry.npmjs.org/@vtaits/use-lazy-ref/-/use-lazy-ref-0.1.3.tgz", "resolved": "https://registry.npmjs.org/@vtaits/use-lazy-ref/-/use-lazy-ref-0.1.3.tgz",

View File

@ -39,6 +39,8 @@
"zustand": "^4.5.2" "zustand": "^4.5.2"
}, },
"devDependencies": { "devDependencies": {
"@types/jquery": "^3.5.30",
"@types/uuid": "^10.0.0",
"autoprefixer": "^10.4.19", "autoprefixer": "^10.4.19",
"postcss": "^8.4.38", "postcss": "^8.4.38",
"tailwindcss": "^3.4.3" "tailwindcss": "^3.4.3"

View File

@ -14,6 +14,7 @@ export class App {
constructor(jwt: String) { constructor(jwt: String) {
let token = container.resolve(Token) let token = container.resolve(Token)
console.log(jwt)
token.currentToken = jwt token.currentToken = jwt
token.init() token.init()
} }

View File

@ -1,4 +1,3 @@
import {v4 as uuidv4} from 'uuid'
import {Shop} from "./shop" import {Shop} from "./shop"
export class LayouterData { export class LayouterData {

View File

@ -12,7 +12,7 @@ import {container} from "tsyringe"
import {OrderState} from "../../state/order" import {OrderState} from "../../state/order"
import {OrderService} from "../../services/order" import {OrderService} from "../../services/order"
import InfoFieldComponent from "../info/InfoFieldComponent" import InfoFieldComponent from "../info/InfoFieldComponent"
import React = require('react') import React from 'react'
import OrderAliasComponent from '../order/OrderAliasComponent' import OrderAliasComponent from '../order/OrderAliasComponent'
const BaseComponent = (props) => { const BaseComponent = (props) => {

View File

@ -1,10 +1,12 @@
import { BsPlus } from "@react-icons/all-files/bs/BsPlus"; import { BsPlus } from "@react-icons/all-files/bs/BsPlus"
import { BsPencil } from "@react-icons/all-files/bs/BsPencil"; import { BsPencil } from "@react-icons/all-files/bs/BsPencil"
import { RiSaveFill } from "@react-icons/all-files/ri/RiSaveFill"; import { RiSaveFill } from "@react-icons/all-files/ri/RiSaveFill"
import { RiDeleteBin2Line } from "@react-icons/all-files/ri/RiDeleteBin2Line"; import { RiDeleteBin2Line } from "@react-icons/all-files/ri/RiDeleteBin2Line"
import { BsXCircle } from "@react-icons/all-files/bs/BsXCircle"; import { BsXCircle } from "@react-icons/all-files/bs/BsXCircle"
import { Button as BaseButton } from "flowbite-react"; import { Button as BaseButton } from "flowbite-react"
const Button = ({ type, variant, onClick }) => { import React from 'react'
const Button = ({ type: number, variant: string, onClick }) => {
return ( return (
<BaseButton color={variant} pill onClick={onClick}> <BaseButton color={variant} pill onClick={onClick}>
{ type == 1 && <BsPlus/> } { type == 1 && <BsPlus/> }

View File

@ -1,4 +1,4 @@
import * as React from 'react' import React from 'react'
interface IProps { interface IProps {
price: number; price: number;

View File

@ -1,5 +1,6 @@
import styled from "styled-components" import styled from "styled-components"
import { components } from "react-select"; import { components } from "react-select"
import React from 'react'
export const SelectLabel = (props: any) => { export const SelectLabel = (props: any) => {

View File

@ -1,14 +1,15 @@
import { OrderState } from '../../state/order' import { OrderState } from '../../state/order'
import {container} from "tsyringe" import {container} from "tsyringe"
import { OrderService } from '../../services/order' import { OrderService } from '../../services/order'
import * as React from 'react' import { Component } from 'react'
import {debounceTime} from "rxjs" import {debounceTime} from "rxjs"
import {Order} from "../../model/order" import {Order} from "../../model/order"
import { RiSaveFill } from "@react-icons/all-files/ri/RiSaveFill"; import { RiSaveFill } from "@react-icons/all-files/ri/RiSaveFill"
import { RiPrinterFill } from "@react-icons/all-files/ri/RiPrinterFill"; import { RiPrinterFill } from "@react-icons/all-files/ri/RiPrinterFill"
import { Button } from "flowbite-react"; import { Button } from "flowbite-react"
import React from 'react'
class ButtonComponent extends React.Component<{loadOrder},{disabled: boolean}> { class ButtonComponent extends Component<{loadOrder},{disabled: boolean}> {
orderState: OrderState orderState: OrderState
orderService: OrderService orderService: OrderService
constructor(props) { constructor(props) {

View File

@ -1,6 +1,6 @@
import React from 'react'
import * as PropTypes from "prop-types" import * as PropTypes from "prop-types"
import {Order} from "../../model/order" import {Order} from "../../model/order"
import * as React from 'react'
import {container} from "tsyringe" import {container} from "tsyringe"
import {OrderState} from "../../state/order" import {OrderState} from "../../state/order"
import { debounceTime } from 'rxjs' import { debounceTime } from 'rxjs'

View File

@ -1,8 +1,7 @@
import * as PropTypes from 'prop-types' import * as PropTypes from 'prop-types'
import { Address } from '../../model/address' import { Address } from '../../model/address'
import * as React from 'react' import React from 'react'
const AddressDetail = ({address: Address}) => {
const AddressDetail = ({address}) => {
return ( return (
<small>{address.company} {address.firstname} {address.lastname} {address.street} {address.houseNumber} {address.country} {address.zip} {address.city}</small> <small>{address.company} {address.firstname} {address.lastname} {address.street} {address.houseNumber} {address.country} {address.zip} {address.city}</small>

View File

@ -5,7 +5,8 @@ import {RJSFSchema} from "@rjsf/utils"
import validator from "@rjsf/validator-ajv6" import validator from "@rjsf/validator-ajv6"
import Form from "@rjsf/core" import Form from "@rjsf/core"
import { CountryService } from '../../services/country' import { CountryService } from '../../services/country'
import { Modal } from "flowbite-react"; import { Modal } from "flowbite-react"
import React from 'react'
const Addressdiv = NiceModal.create( const Addressdiv = NiceModal.create(
({ title, action, address, shop }) => { ({ title, action, address, shop }) => {
@ -37,7 +38,7 @@ const Addressdiv = NiceModal.create(
useEffect(() => { useEffect(() => {
country_api.getCountry(shop).then(( data ) => { country_api.getCountry(shop).then(( data ) => {
var countrys = []; var countrys: array = [];
data.forEach((item) => { data.forEach((item) => {
countrys.push({'title': item.code, 'const': item.code}) countrys.push({'title': item.code, 'const': item.code})

View File

@ -5,6 +5,7 @@ import { useCallback } from 'react'
import { useModal } from '@ebay/nice-modal-react' import { useModal } from '@ebay/nice-modal-react'
import { Address } from "../../model/address" import { Address } from "../../model/address"
import { Shop } from "../../model/shop" import { Shop } from "../../model/shop"
import React from 'react'
const AddressModalComponent = ({handleAdd, handleEdit, address, shop}) => { const AddressModalComponent = ({handleAdd, handleEdit, address, shop}) => {
const addressModal = useModal(AddressModal) const addressModal = useModal(AddressModal)

View File

@ -10,6 +10,7 @@ import AddressModalComponent from "./AddressModalComponent"
import { SelectLabel } from '../base/SelectLabel' import { SelectLabel } from '../base/SelectLabel'
import AddressDetail from './AddressDetail' import AddressDetail from './AddressDetail'
import { Shop } from '../../model/shop' import { Shop } from '../../model/shop'
import React from 'react'
const AddressSelect = ({address, contact, type, changeAddress, name, shop}) => { const AddressSelect = ({address, contact, type, changeAddress, name, shop}) => {

View File

@ -1,6 +1,5 @@
import * as React from 'react' import * as React from 'react'
import * as PropTypes from 'prop-types' import * as PropTypes from 'prop-types'
import orderStore from '../../store/app'
import ContactSelect from './ContactSelect' import ContactSelect from './ContactSelect'
import AddressSelect from './AddressSelect' import AddressSelect from './AddressSelect'
import {Contact} from '../../model/contact' import {Contact} from '../../model/contact'
@ -11,6 +10,7 @@ import {container} from "tsyringe"
import AccountSelectComponent from '../account/AccountSelectComponent' import AccountSelectComponent from '../account/AccountSelectComponent'
import { Order } from '../../model/order' import { Order } from '../../model/order'
import { Shop } from '../../model/shop' import { Shop } from '../../model/shop'
import React from 'react'
const ContactComponent = ({order, shop}) => { const ContactComponent = ({order, shop}) => {

View File

@ -7,6 +7,7 @@ import validator from "@rjsf/validator-ajv6";
import Form from "@rjsf/core"; import Form from "@rjsf/core";
import {CountryService} from "../../services/country"; import {CountryService} from "../../services/country";
import { Modal } from "flowbite-react"; import { Modal } from "flowbite-react";
import React from 'react'
const ContactModal = NiceModal.create( const ContactModal = NiceModal.create(
({ title, action, contact, shop }) => { ({ title, action, contact, shop }) => {

View File

@ -8,6 +8,7 @@ import { useModal } from '@ebay/nice-modal-react'
import { ContactService } from "../../services/contact" import { ContactService } from "../../services/contact"
import { Address } from "../../model/address" import { Address } from "../../model/address"
import { AddressService } from "../../services/address" import { AddressService } from "../../services/address"
import React from 'react'
const ContactModalComponent = ({shop, handleAdd, handleEdit, contact}) => { const ContactModalComponent = ({shop, handleAdd, handleEdit, contact}) => {

View File

@ -1,15 +1,15 @@
import * as PropTypes from 'prop-types'; import * as PropTypes from 'prop-types'
import { AsyncPaginate } from "react-select-async-paginate"; import { AsyncPaginate } from "react-select-async-paginate"
import { Contact } from '../../model/contact'; import { Contact } from '../../model/contact'
import {ContactService} from '../../services/contact'; import {ContactService} from '../../services/contact'
import { Shop } from '../../model/shop'; import { Shop } from '../../model/shop'
import {useEffect, useState} from 'react'; import {useEffect, useState} from 'react'
import { container } from 'tsyringe'; import { container } from 'tsyringe'
import { OrderState } from '../../state/order'; import { OrderState } from '../../state/order'
import ContactModalComponent from "./ContactModalComponent"; import ContactModalComponent from "./ContactModalComponent"
import { Order } from '../../model/order'; import { Order } from '../../model/order'
import { SelectLabel } from '../base/SelectLabel'; import { SelectLabel } from '../base/SelectLabel'
import React from 'react'
const ContactSelect = ({order, shop, onChange}) => { const ContactSelect = ({order, shop, onChange}) => {

View File

@ -2,6 +2,7 @@ import {useEffect, useState} from 'react'
import { container } from 'tsyringe' import { container } from 'tsyringe'
import { OrderState } from '../../state/order' import { OrderState } from '../../state/order'
import { SelectLabel } from '../base/SelectLabel' import { SelectLabel } from '../base/SelectLabel'
import React from 'react'
const DraftComponent = ({order}) => { const DraftComponent = ({order}) => {

View File

@ -1,12 +1,12 @@
import * as React from 'react'; import { AsyncPaginate } from "react-select-async-paginate"
import { AsyncPaginate } from "react-select-async-paginate"; import {ShippingService} from "../../services/shipping"
import {ShippingService} from "../../services/shipping"; import * as PropTypes from "prop-types"
import * as PropTypes from "prop-types"; import {Shop} from "../../model/shop"
import {Shop} from "../../model/shop"; import {container} from "tsyringe"
import {container} from "tsyringe"; import {OrderState} from "../../state/order"
import {OrderState} from "../../state/order"; import {Order} from "../../model/order"
import {Order} from "../../model/order"; import {useEffect, useState} from "react"
import {useEffect, useState} from "react"; import React from 'react'
const InfoFieldComponent = ({shop, order}) => { const InfoFieldComponent = ({shop, order}) => {

View File

@ -11,6 +11,7 @@ import {Order} from "../../model/order"
import { Pos } from '../../model/pos' import { Pos } from '../../model/pos'
import Button from '../base/Button' import Button from '../base/Button'
import { Modal } from "flowbite-react"; import { Modal } from "flowbite-react";
import React from 'react'
const AddPositionComponent = (props) => { const AddPositionComponent = (props) => {

View File

@ -1,4 +1,3 @@
import * as React from 'react'
import {useEffect, useState} from 'react' import {useEffect, useState} from 'react'
import * as PropTypes from "prop-types" import * as PropTypes from "prop-types"
import { Shop } from '../../model/shop' import { Shop } from '../../model/shop'
@ -10,6 +9,7 @@ import { Pos } from '../../model/pos'
import Button from '../base/Button' import Button from '../base/Button'
import ProductForm from '../product/ProductForm' import ProductForm from '../product/ProductForm'
import { Modal } from "flowbite-react"; import { Modal } from "flowbite-react";
import React from 'react'
const EditPositionComponent = ({position, shop, changePos}) => { const EditPositionComponent = ({position, shop, changePos}) => {

View File

@ -1,9 +1,9 @@
import * as React from 'react'
import * as PropTypes from "prop-types" import * as PropTypes from "prop-types"
import PosComponent from "./PosComponent" import PosComponent from "./PosComponent"
import {useEffect} from "react" import {useEffect} from "react"
import {Order} from "../../model/order" import {Order} from "../../model/order"
import { Shop } from '../../model/shop' import { Shop } from '../../model/shop'
import React from 'react'
const ItemsComponent = ({positions, delPos, shop, changePos}) => { const ItemsComponent = ({positions, delPos, shop, changePos}) => {

View File

@ -1,4 +1,4 @@
import * as React from 'react' import React from 'react'
import * as PropTypes from "prop-types" import * as PropTypes from "prop-types"
import {Pos} from "../../model/pos" import {Pos} from "../../model/pos"
import Button from '../base/Button' import Button from '../base/Button'

View File

@ -1,4 +1,4 @@
import * as React from 'react' import React from 'react'
import AddPositionComponent from "./AddPositionComponent" import AddPositionComponent from "./AddPositionComponent"
import ItemsComponent from "./ItemsComponent" import ItemsComponent from "./ItemsComponent"
import * as PropTypes from "prop-types" import * as PropTypes from "prop-types"

View File

@ -12,6 +12,7 @@ import {Pos} from "../../model/pos"
import { useDebouncedCallback } from 'use-debounce' import { useDebouncedCallback } from 'use-debounce'
import Button from '../base/Button' import Button from '../base/Button'
import Currency from '../base/Currency' import Currency from '../base/Currency'
import React from 'react'
const ProductForm = ({shop, pos, handleClose, handleChange}) => { const ProductForm = ({shop, pos, handleClose, handleChange}) => {
const product_api = new ProductService() const product_api = new ProductService()

View File

@ -5,6 +5,7 @@ import { OrderState } from '../../state/order';
import {ProductGroup} from "../../model/productGroup"; import {ProductGroup} from "../../model/productGroup";
import {ProductGroupService} from "../../services/productgroup"; import {ProductGroupService} from "../../services/productgroup";
import AsyncSelect , { useAsync } from 'react-select/async'; import AsyncSelect , { useAsync } from 'react-select/async';
import React from 'react'
const ProductGroupSelect = (props) => { const ProductGroupSelect = (props) => {
const orderState: OrderState = container.resolve(OrderState); const orderState: OrderState = container.resolve(OrderState);

View File

@ -7,6 +7,7 @@ import {ProductGroup} from "../../model/productGroup";
import AsyncSelect from "react-select/async"; import AsyncSelect from "react-select/async";
import {ProductService} from "../../services/product"; import {ProductService} from "../../services/product";
import {useDebounce} from "use-debounce"; import {useDebounce} from "use-debounce";
import React from 'react'
const ProductSelect = (props) => { const ProductSelect = (props) => {

View File

@ -1,4 +1,3 @@
import * as React from 'react'
import { AsyncPaginate } from "react-select-async-paginate" import { AsyncPaginate } from "react-select-async-paginate"
import {ShippingService} from "../../services/shipping" import {ShippingService} from "../../services/shipping"
import * as PropTypes from "prop-types" import * as PropTypes from "prop-types"
@ -8,6 +7,7 @@ import {OrderState} from "../../state/order"
import {Order} from "../../model/order" import {Order} from "../../model/order"
import {useEffect, useState} from "react" import {useEffect, useState} from "react"
import { SelectLabel } from '../base/SelectLabel' import { SelectLabel } from '../base/SelectLabel'
import React from 'react'
const ShippingComponent = ({shop, order}) => { const ShippingComponent = ({shop, order}) => {

View File

@ -1,17 +1,17 @@
import * as React from 'react'
import { AsyncPaginate } from "react-select-async-paginate" import { AsyncPaginate } from "react-select-async-paginate"
import { ShopService } from '../../services/shop' import { ShopService } from '../../services/shop'
import { container } from 'tsyringe' import { container } from 'tsyringe'
import { OrderState } from '../../state/order' import { OrderState } from '../../state/order'
import { SelectLabel } from '../base/SelectLabel' import { SelectLabel } from '../base/SelectLabel'
import React from 'react'
const ShopSelectComponent = (props) => { const ShopSelectComponent = (props) => {
const orderState = container.resolve(OrderState) const orderState = container.resolve(OrderState)
const loadOptions = async (searchQuery, loadedOptions) => { const shop_service = container.resolve(ShopService)
const shop_service = new ShopService() const loadOptions = async (searchQuery, loadedOptions) => {
const data = await shop_service.getShops() const data = await shop_service.getShops()

View File

@ -5,6 +5,7 @@ import {Shop} from "../../model/shop"
import DraftComponent from "../draft/DraftComponent" import DraftComponent from "../draft/DraftComponent"
import {Order} from "../../model/order" import {Order} from "../../model/order"
import CalcComponent from '../calc/CalcComponent' import CalcComponent from '../calc/CalcComponent'
import React from 'react'
const TopBarComponent = ({shop, order, change}) => { const TopBarComponent = ({shop, order, change}) => {

View File

@ -1,8 +1,9 @@
import Select from 'react-select'; import Select from 'react-select'
import {useEffect, useState} from 'react'; import {useEffect, useState} from 'react'
import { container } from 'tsyringe'; import { container } from 'tsyringe'
import { OrderState } from '../../state/order'; import { OrderState } from '../../state/order'
import { SelectLabel } from '../base/SelectLabel'; import { SelectLabel } from '../base/SelectLabel'
import React from 'react'
const TypeSelectComponent = ({order}) => { const TypeSelectComponent = ({order}) => {

View File

@ -13,10 +13,10 @@ export class AccountService {
return await axios.get('/apps/api/account/allbyshop/' + shop.uuid, { return await axios.get('/apps/api/account/allbyshop/' + shop.uuid, {
headers: { headers: {
'Authorization': 'Bearer ' + this.token.currentToken 'Authorization': 'Bearer ' + this.token?.currentToken
} }
}).then(( response ) => { }).then(( response ) => {
return response.data.data.map((item) => { return response.data.data.map((item: any) => {
let account = new Account(); let account = new Account();
account.uid = item.uid; account.uid = item.uid;
account.title = item.title; account.title = item.title;

View File

@ -12,7 +12,7 @@ export class AddressService {
return await axios.post('/apps/api/contact/address/create', {'address': address} ,{ return await axios.post('/apps/api/contact/address/create', {'address': address} ,{
headers: { headers: {
'Authorization': 'Bearer ' + this.token.currentToken 'Authorization': 'Bearer ' + this.token?.currentToken
} }
}).then(( response ) => { }).then(( response ) => {
return response.data return response.data
@ -23,7 +23,7 @@ export class AddressService {
return await axios.put('/apps/api/contact/address/update/' + address.uuid, {'address': address} ,{ return await axios.put('/apps/api/contact/address/update/' + address.uuid, {'address': address} ,{
headers: { headers: {
'Authorization': 'Bearer ' + this.token.currentToken 'Authorization': 'Bearer ' + this.token?.currentToken
} }
}).then(( response ) => { }).then(( response ) => {
return response.data return response.data
@ -33,10 +33,10 @@ export class AddressService {
async getContactAddress(contact: String, type: Number): Promise<Address[]> { async getContactAddress(contact: String, type: Number): Promise<Address[]> {
return await axios.get('/apps/api/contact/address/getallfortype/' + contact + '/' + type, { return await axios.get('/apps/api/contact/address/getallfortype/' + contact + '/' + type, {
headers: { headers: {
'Authorization': 'Bearer ' + this.token.currentToken 'Authorization': 'Bearer ' + this.token?.currentToken
} }
}).then(( response ) => { }).then(( response ) => {
return response.data.data.map((item) => { return response.data.data.map((item: any) => {
let address = new Address let address = new Address
address.uid = item.uid address.uid = item.uid
address.firstname = item.firstname address.firstname = item.firstname

View File

@ -14,7 +14,7 @@ export class ContactService {
return await axios.post('/apps/api/contact/create', {'contact': contact} ,{ return await axios.post('/apps/api/contact/create', {'contact': contact} ,{
headers: { headers: {
'Authorization': 'Bearer ' + this.token.currentToken 'Authorization': 'Bearer ' + this.token?.currentToken
} }
}).then(( response ) => { }).then(( response ) => {
return response.data; return response.data;
@ -25,7 +25,7 @@ export class ContactService {
return await axios.put('/apps/api/contact/update/' + contact.uuid, {'contact': contact} ,{ return await axios.put('/apps/api/contact/update/' + contact.uuid, {'contact': contact} ,{
headers: { headers: {
'Authorization': 'Bearer ' + this.token.currentToken 'Authorization': 'Bearer ' + this.token?.currentToken
} }
}).then(( response ) => { }).then(( response ) => {
return response.data; return response.data;
@ -36,10 +36,10 @@ export class ContactService {
return await axios.get('/apps/api/contact/allbyshop/' + shop.uuid + '?term=' + searchQuery + '&page=' + page, { return await axios.get('/apps/api/contact/allbyshop/' + shop.uuid + '?term=' + searchQuery + '&page=' + page, {
headers: { headers: {
'Authorization': 'Bearer ' + this.token.currentToken 'Authorization': 'Bearer ' + this.token?.currentToken
} }
}).then(( response ) => { }).then(( response ) => {
return response.data.data.map((item) => { return response.data.data.map((item: any) => {
let contact = new Contact; let contact = new Contact;
contact.parseFromJson({contact: item}); contact.parseFromJson({contact: item});
return contact; return contact;

View File

@ -10,7 +10,7 @@ export class CountryService {
async getCountry(shop: Shop): Promise<Country[]> { async getCountry(shop: Shop): Promise<Country[]> {
return await axios.get('/apps/api/country/by/shop/' + shop.uuid).then(( response ) => { return await axios.get('/apps/api/country/by/shop/' + shop.uuid).then(( response ) => {
return response.data.data.map((item) => { return response.data.data.map((item: any) => {
let country = new Country() let country = new Country()
country.parseFromJson(item) country.parseFromJson(item)
return country return country

View File

@ -13,7 +13,7 @@ export class OrderService {
return await axios.post('/apps/api/order/getonebyuuid', {uuid: uuid} ,{ return await axios.post('/apps/api/order/getonebyuuid', {uuid: uuid} ,{
headers: { headers: {
'Authorization': 'Bearer ' + this.token.currentToken 'Authorization': 'Bearer ' + this.token?.currentToken
} }
}).then(( response ) => { }).then(( response ) => {
@ -28,7 +28,7 @@ export class OrderService {
async saveOrder(order: Order): Promise<Order> { async saveOrder(order: Order): Promise<Order> {
return await axios.post('/apps/api/order/create', order ,{ return await axios.post('/apps/api/order/create', order ,{
headers: { headers: {
'Authorization': 'Bearer ' + this.token.currentToken 'Authorization': 'Bearer ' + this.token?.currentToken
} }
}).then(( response ) => { }).then(( response ) => {
return response.data; return response.data;
@ -39,7 +39,7 @@ export class OrderService {
return await axios.post('/apps/api/order/calc', order ,{ return await axios.post('/apps/api/order/calc', order ,{
headers: { headers: {
'Authorization': 'Bearer ' + this.token.currentToken 'Authorization': 'Bearer ' + this.token?.currentToken
} }
}).then(( response ) => { }).then(( response ) => {
return response.data; return response.data;

View File

@ -13,10 +13,10 @@ export class PaymentService {
return await axios.get('/apps/api/payment/by/shop/' + shop.uuid, { return await axios.get('/apps/api/payment/by/shop/' + shop.uuid, {
headers: { headers: {
'Authorization': 'Bearer ' + this.token.currentToken 'Authorization': 'Bearer ' + this.token?.currentToken
} }
}).then(( response ) => { }).then(( response ) => {
return response.data.data.map((item) => { return response.data.data.map((item: any) => {
let payment = new Payment() let payment = new Payment()
payment.uid = item.uid payment.uid = item.uid
payment.title = item.title payment.title = item.title

View File

@ -15,10 +15,10 @@ export class ProductService {
return await axios.get('/apps/api/product/getallbyterm/' + shop.uuid + '/' + term, { return await axios.get('/apps/api/product/getallbyterm/' + shop.uuid + '/' + term, {
headers: { headers: {
'Authorization': 'Bearer ' + this.token.currentToken 'Authorization': 'Bearer ' + this.token?.currentToken
} }
}).then(( response ) => { }).then(( response ) => {
return response.data.data.map((item) => { return response.data.data.map((item: any) => {
let p = new Product(); let p = new Product();
p.id = item.id; p.id = item.id;
p.title = item.title; p.title = item.title;
@ -35,10 +35,10 @@ export class ProductService {
return await axios.get('/apps/api/product/getallbyproductgroup/' + productGroup.uuid, { return await axios.get('/apps/api/product/getallbyproductgroup/' + productGroup.uuid, {
headers: { headers: {
'Authorization': 'Bearer ' + this.token.currentToken 'Authorization': 'Bearer ' + this.token?.currentToken
} }
}).then(( response ) => { }).then(( response ) => {
return response.data.data.map((item) => { return response.data.data.map((item: any) => {
let p = new Product(); let p = new Product();
p.id = item.id; p.id = item.id;
p.title = item.title; p.title = item.title;
@ -51,10 +51,10 @@ export class ProductService {
}) })
} }
async getAddProductSchema(product: Product, formData): Promise<JSONSchema7> { async getAddProductSchema(product: Product, formData: any): Promise<JSONSchema7> {
return await axios.post('/apps/api/product/get/form/json/' + product.uuid, formData, { return await axios.post('/apps/api/product/get/form/json/' + product.uuid, formData, {
headers: { headers: {
'Authorization': 'Bearer ' + this.token.currentToken 'Authorization': 'Bearer ' + this.token?.currentToken
} }
}).then(( response ) => { }).then(( response ) => {
return response.data; return response.data;
@ -64,7 +64,7 @@ export class ProductService {
async calcProduct(product: Product, formData): Promise<JSONSchema7> { async calcProduct(product: Product, formData): Promise<JSONSchema7> {
return await axios.post('/apps/api/product/get/form/json/' + product.uuid, formData, { return await axios.post('/apps/api/product/get/form/json/' + product.uuid, formData, {
headers: { headers: {
'Authorization': 'Bearer ' + this.token.currentToken 'Authorization': 'Bearer ' + this.token?.currentToken
} }
}).then(( response ) => { }).then(( response ) => {
return response.data; return response.data;

View File

@ -17,9 +17,9 @@ export class ProductGroupService {
} }
}).then(( response ) => { }).then(( response ) => {
let temp = []; let temp: ProductGroup[] = [];
response.data.data.map((item) => { response.data.data.map((item: any) => {
let pg = new ProductGroup; let pg = new ProductGroup;
pg.id = item.id; pg.id = item.id;
pg.label = item.title; pg.label = item.title;
@ -27,7 +27,7 @@ export class ProductGroupService {
temp.push(pg); temp.push(pg);
item.children.map((sub) => { item.children.map((sub: any) => {
let spg = new ProductGroup; let spg = new ProductGroup;
spg.id = sub.id; spg.id = sub.id;
spg.label = "-- " + sub.title; spg.label = "-- " + sub.title;

View File

@ -13,10 +13,10 @@ export class ShippingService {
return await axios.get('/apps/api/shipping/by/shop/' + shop.uuid, { return await axios.get('/apps/api/shipping/by/shop/' + shop.uuid, {
headers: { headers: {
'Authorization': 'Bearer ' + this.token.currentToken 'Authorization': 'Bearer ' + this.token?.currentToken
} }
}).then(( response ) => { }).then(( response ) => {
return response.data.data.map((item) => { return response.data.data.map((item: any) => {
let shipment = new Shipping() let shipment = new Shipping()
shipment.uid = item.uid shipment.uid = item.uid
shipment.title = item.title shipment.title = item.title

View File

@ -6,16 +6,17 @@ import { Shop } from "../model/shop"
@singleton() @singleton()
@autoInjectable() @autoInjectable()
export class ShopService { export class ShopService {
constructor(private token?: Token) {} constructor(private token: Token) {}
async getShops(): Promise<Shop[]> { async getShops(): Promise<Shop[]> {
console.log(this.token)
return await axios.get('/apps/api/shops', { return await axios.get('/apps/api/shops', {
headers: { headers: {
'Authorization': 'Bearer ' + this.token.currentToken 'Authorization': 'Bearer ' + this.token.currentToken
} }
}).then(( response ) => { }).then(( response ) => {
return response.data.data.map((item) => { return response.data.data.map((item: any) => {
let shop = new Shop() let shop = new Shop()
shop.parseFromJson({shop: item}) shop.parseFromJson({shop: item})
return shop return shop

View File

@ -1,5 +1,3 @@
import { from, map, Observable, timer } from "rxjs"
import axios from "axios" import axios from "axios"
import {singleton} from "tsyringe" import {singleton} from "tsyringe"

View File

@ -1,6 +0,0 @@
import {singleton} from "tsyringe"
@singleton()
export class App {
}

View File

@ -1,25 +0,0 @@
import create from 'zustand'
import { devtools, persist } from 'zustand/middleware'
interface OrderState {
contact: number,
payment: number,
shippment: number,
}
const orderStore = create<OrderState>()(
devtools(
persist(
(set) => ({
contact: null,
payment: null,
shippment: null
}),
{
name: 'order-storage',
}
)
)
)
export default orderStore

View File

@ -136,7 +136,7 @@
resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz" resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz"
integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==
"@emotion/unitless@0.8.1", "@emotion/unitless@^0.8.1": "@emotion/unitless@^0.8.1", "@emotion/unitless@0.8.1":
version "0.8.1" version "0.8.1"
resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz" resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz"
integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==
@ -156,7 +156,7 @@
resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz" resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz"
integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==
"@floating-ui/core@1.6.0", "@floating-ui/core@^1.3.1": "@floating-ui/core@^1.3.1", "@floating-ui/core@1.6.0":
version "1.6.0" version "1.6.0"
resolved "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz" resolved "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz"
integrity sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g== integrity sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==
@ -243,7 +243,7 @@
"@nodelib/fs.stat" "2.0.5" "@nodelib/fs.stat" "2.0.5"
run-parallel "^1.1.9" run-parallel "^1.1.9"
"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": "@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
version "2.0.5" version "2.0.5"
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
@ -287,7 +287,7 @@
nanoid "^3.3.7" nanoid "^3.3.7"
prop-types "^15.8.1" prop-types "^15.8.1"
"@rjsf/utils@^5.18.3": "@rjsf/utils@^5.18.3", "@rjsf/utils@^5.18.x":
version "5.18.3" version "5.18.3"
resolved "https://registry.npmjs.org/@rjsf/utils/-/utils-5.18.3.tgz" resolved "https://registry.npmjs.org/@rjsf/utils/-/utils-5.18.3.tgz"
integrity sha512-0TzjAKAlqXSCneVnHhcL3gAr4DlIPgwzkFdNEI4A+LFjLFlECPah2o3RhEgvqJnUXFviDGF1dqhkxa/Pr59ajw== integrity sha512-0TzjAKAlqXSCneVnHhcL3gAr4DlIPgwzkFdNEI4A+LFjLFlECPah2o3RhEgvqJnUXFviDGF1dqhkxa/Pr59ajw==
@ -320,6 +320,13 @@
"@types/react" "*" "@types/react" "*"
hoist-non-react-statics "^3.3.0" hoist-non-react-statics "^3.3.0"
"@types/jquery@^3.5.30":
version "3.5.30"
resolved "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.30.tgz"
integrity sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==
dependencies:
"@types/sizzle" "*"
"@types/parse-json@^4.0.0": "@types/parse-json@^4.0.0":
version "4.0.0" version "4.0.0"
resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz"
@ -344,7 +351,7 @@
dependencies: dependencies:
"@types/react" "*" "@types/react" "*"
"@types/react@*", "@types/react@^18.3.1": "@types/react@*", "@types/react@^18.3.1", "@types/react@>=16.8":
version "18.3.1" version "18.3.1"
resolved "https://registry.npmjs.org/@types/react/-/react-18.3.1.tgz" resolved "https://registry.npmjs.org/@types/react/-/react-18.3.1.tgz"
integrity sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw== integrity sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==
@ -352,6 +359,11 @@
"@types/prop-types" "*" "@types/prop-types" "*"
csstype "^3.0.2" csstype "^3.0.2"
"@types/sizzle@*":
version "2.3.8"
resolved "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz"
integrity sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==
"@types/styled-components@^5.1.34": "@types/styled-components@^5.1.34":
version "5.1.34" version "5.1.34"
resolved "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.34.tgz" resolved "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.34.tgz"
@ -366,6 +378,11 @@
resolved "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz" resolved "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz"
integrity sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw== integrity sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==
"@types/uuid@^10.0.0":
version "10.0.0"
resolved "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz"
integrity sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==
"@vtaits/use-lazy-ref@^0.1.3": "@vtaits/use-lazy-ref@^0.1.3":
version "0.1.3" version "0.1.3"
resolved "https://registry.npmjs.org/@vtaits/use-lazy-ref/-/use-lazy-ref-0.1.3.tgz" resolved "https://registry.npmjs.org/@vtaits/use-lazy-ref/-/use-lazy-ref-0.1.3.tgz"
@ -487,7 +504,7 @@ braces@^3.0.2, braces@~3.0.2:
dependencies: dependencies:
fill-range "^7.0.1" fill-range "^7.0.1"
browserslist@^4.23.0: browserslist@^4.23.0, "browserslist@>= 4.21.0":
version "4.23.0" version "4.23.0"
resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz"
integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==
@ -560,16 +577,16 @@ color-convert@^2.0.1:
dependencies: dependencies:
color-name "~1.1.4" color-name "~1.1.4"
color-name@1.1.3:
version "1.1.3"
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
color-name@~1.1.4: color-name@~1.1.4:
version "1.1.4" version "1.1.4"
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
color-name@1.1.3:
version "1.1.3"
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
combined-stream@^1.0.8: combined-stream@^1.0.8:
version "1.0.8" version "1.0.8"
resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
@ -645,7 +662,7 @@ cssesc@^3.0.0:
resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz"
integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
csstype@3.1.3, csstype@^3.0.2: csstype@^3.0.2, csstype@3.1.3:
version "3.1.3" version "3.1.3"
resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz"
integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
@ -783,7 +800,7 @@ flowbite-react@^0.9.0:
react-icons "5.0.1" react-icons "5.0.1"
tailwind-merge "2.2.2" tailwind-merge "2.2.2"
flowbite@2.3.0, flowbite@^2.3.0: flowbite@^2.3.0, flowbite@2.3.0:
version "2.3.0" version "2.3.0"
resolved "https://registry.npmjs.org/flowbite/-/flowbite-2.3.0.tgz" resolved "https://registry.npmjs.org/flowbite/-/flowbite-2.3.0.tgz"
integrity sha512-pm3JRo8OIJHGfFYWgaGpPv8E+UdWy0Z3gEAGufw+G/1dusaU/P1zoBLiQpf2/+bYAi+GBQtPVG86KYlV0W+AFQ== integrity sha512-pm3JRo8OIJHGfFYWgaGpPv8E+UdWy0Z3gEAGufw+G/1dusaU/P1zoBLiQpf2/+bYAi+GBQtPVG86KYlV0W+AFQ==
@ -818,17 +835,12 @@ fraction.js@^4.3.7:
resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz" resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz"
integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
fsevents@~2.3.2:
version "2.3.3"
resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz"
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
function-bind@^1.1.1: function-bind@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
glob-parent@^5.1.2, glob-parent@~5.1.2: glob-parent@^5.1.2:
version "5.1.2" version "5.1.2"
resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
@ -842,6 +854,13 @@ glob-parent@^6.0.2:
dependencies: dependencies:
is-glob "^4.0.3" is-glob "^4.0.3"
glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
dependencies:
is-glob "^4.0.1"
glob@^10.3.10: glob@^10.3.10:
version "10.3.15" version "10.3.15"
resolved "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz" resolved "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz"
@ -879,7 +898,7 @@ html-parse-stringify@^3.0.1:
dependencies: dependencies:
void-elements "3.1.0" void-elements "3.1.0"
i18next@^23.11.3: i18next@^23.11.3, "i18next@>= 23.2.3":
version "23.11.3" version "23.11.3"
resolved "https://registry.npmjs.org/i18next/-/i18next-23.11.3.tgz" resolved "https://registry.npmjs.org/i18next/-/i18next-23.11.3.tgz"
integrity sha512-Pq/aSKowir7JM0rj+Wa23Kb6KKDUGno/HjG+wRQu0PxoTbpQ4N89MAT0rFGvXmLkRLNMb1BbBOKGozl01dabzg== integrity sha512-Pq/aSKowir7JM0rj+Wa23Kb6KKDUGno/HjG+wRQu0PxoTbpQ4N89MAT0rFGvXmLkRLNMb1BbBOKGozl01dabzg==
@ -1227,7 +1246,7 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^
resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
postcss@8.4.38, postcss@^8.4.23, postcss@^8.4.38: postcss@^8.0.0, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.38, postcss@>=8.0.9, postcss@8.4.38:
version "8.4.38" version "8.4.38"
resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz"
integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==
@ -1260,7 +1279,7 @@ queue-microtask@^1.2.2:
resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
react-dom@^18.3.1: "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", react-dom@^18.3.1, "react-dom@>= 16.8.0", react-dom@>=16.6.0, react-dom@>=16.8, react-dom@>=16.8.0, react-dom@>=18, react-dom@>16.8.0:
version "18.3.1" version "18.3.1"
resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz"
integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==
@ -1281,7 +1300,12 @@ react-icons@5.0.1:
resolved "https://registry.npmjs.org/react-icons/-/react-icons-5.0.1.tgz" resolved "https://registry.npmjs.org/react-icons/-/react-icons-5.0.1.tgz"
integrity sha512-WqLZJ4bLzlhmsvme6iFdgO8gfZP17rfjYEJ2m9RsZjZ+cc4k1hTzknEz63YS1MeT50kVzoa1Nz36f4BEx+Wigw== integrity sha512-WqLZJ4bLzlhmsvme6iFdgO8gfZP17rfjYEJ2m9RsZjZ+cc4k1hTzknEz63YS1MeT50kVzoa1Nz36f4BEx+Wigw==
react-is@^16.13.1, react-is@^16.7.0: react-is@^16.13.1:
version "16.13.1"
resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
react-is@^16.7.0:
version "16.13.1" version "16.13.1"
resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
@ -1318,7 +1342,7 @@ react-select-async-paginate@^0.7.4:
use-is-mounted-ref "^1.5.0" use-is-mounted-ref "^1.5.0"
use-latest "^1.2.1" use-latest "^1.2.1"
react-select@^5.8.0: react-select@^5.0.0, react-select@^5.8.0:
version "5.8.0" version "5.8.0"
resolved "https://registry.npmjs.org/react-select/-/react-select-5.8.0.tgz" resolved "https://registry.npmjs.org/react-select/-/react-select-5.8.0.tgz"
integrity sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA== integrity sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==
@ -1343,7 +1367,7 @@ react-transition-group@^4.3.0:
loose-envify "^1.4.0" loose-envify "^1.4.0"
prop-types "^15.6.2" prop-types "^15.6.2"
react@^18.3.1: react@*, "react@^16.14.0 || ^17.0.0 || ^18.0.0", "react@^16.14.0 || >=17", "react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^18.3.1, "react@>= 0.14.0", "react@>= 16.8.0", react@>=16.0.0, react@>=16.6.0, react@>=16.8, react@>=16.8.0, react@>=18, react@>16.8.0:
version "18.3.1" version "18.3.1"
resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz" resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz"
integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==
@ -1451,7 +1475,16 @@ source-map@^0.5.7:
resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz"
integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: "string-width-cjs@npm:string-width@^4.2.0":
version "4.2.3"
resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
dependencies:
emoji-regex "^8.0.0"
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"
string-width@^4.1.0:
version "4.2.3" version "4.2.3"
resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@ -1469,7 +1502,14 @@ string-width@^5.0.1, string-width@^5.1.2:
emoji-regex "^9.2.2" emoji-regex "^9.2.2"
strip-ansi "^7.0.1" strip-ansi "^7.0.1"
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: "strip-ansi-cjs@npm:strip-ansi@^6.0.1":
version "6.0.1"
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
dependencies:
ansi-regex "^5.0.1"
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1" version "6.0.1"
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@ -1545,7 +1585,7 @@ tailwind-merge@2.2.2:
dependencies: dependencies:
"@babel/runtime" "^7.24.0" "@babel/runtime" "^7.24.0"
tailwindcss@^3.4.3: tailwindcss@^3, tailwindcss@^3.4.3:
version "3.4.3" version "3.4.3"
resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz" resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz"
integrity sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A== integrity sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==
@ -1604,16 +1644,16 @@ ts-interface-checker@^0.1.9:
resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz"
integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
tslib@2.6.2, tslib@^2.1.0:
version "2.6.2"
resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz"
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
tslib@^1.9.3: tslib@^1.9.3:
version "1.14.1" version "1.14.1"
resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
tslib@^2.1.0, tslib@2.6.2:
version "2.6.2"
resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz"
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
tsyringe@^4.8.0: tsyringe@^4.8.0:
version "4.8.0" version "4.8.0"
resolved "https://registry.npmjs.org/tsyringe/-/tsyringe-4.8.0.tgz" resolved "https://registry.npmjs.org/tsyringe/-/tsyringe-4.8.0.tgz"

File diff suppressed because one or more lines are too long

View File

@ -1,85 +0,0 @@
/*
* @license
*
* Multiselect v2.5.6
* http://crlcu.github.io/multiselect/
*
* Copyright (c) 2016-2020 Adrian Crisan
* Licensed under the MIT license (https://github.com/crlcu/multiselect/blob/master/LICENSE)
*/
/* @license
morris.js v0.5.0
Copyright 2014 Olly Smith All rights reserved.
Licensed under the BSD-2-Clause License.
*/
/*!
* Bootstrap v5.1.0 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
/*!
*
* Super simple WYSIWYG editor v0.8.20
* https://summernote.org
*
*
* Copyright 2013- Alan Hong and contributors
* Summernote may be freely distributed under the MIT license.
*
* Date: 2021-10-14T21:15Z
*
*/
/*!
* @kurkle/color v0.3.2
* https://github.com/kurkle/color#readme
* (c) 2023 Jukka Kurkela
* Released under the MIT License
*/
/*!
* Chart.js v4.4.4
* https://www.chartjs.org
* (c) 2024 Chart.js Contributors
* Released under the MIT License
*/
/*!
* Sizzle CSS Selector Engine v2.3.6
* https://sizzlejs.com/
*
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://js.foundation/
*
* Date: 2021-02-16
*/
/*!
* jQuery JavaScript Library v3.6.0
* https://jquery.com/
*
* Includes Sizzle.js
* https://sizzlejs.com/
*
* Copyright OpenJS Foundation and other contributors
* Released under the MIT license
* https://jquery.org/license
*
* Date: 2021-03-02T17:08Z
*/
/*! ========================================================================
* Bootstrap Toggle: bootstrap-toggle.js v2.2.0
* http://www.bootstraptoggle.com
* ========================================================================
* Copyright 2014 Min Hur, The New York Times Company
* Licensed under MIT
* ======================================================================== */
/*! @orchidjs/unicode-variants | https://github.com/orchidjs/unicode-variants | Apache License (v2) */
/*! sifter.js | https://github.com/orchidjs/sifter.js | Apache License (v2) */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,134 +0,0 @@
/*!
Copyright (c) 2018 Jed Watson.
Licensed under the MIT License (MIT), see
http://jedwatson.github.io/classnames
*/
/*!
* tabbable 6.2.0
* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE
*/
/*! *****************************************************************************
Copyright (C) Microsoft. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
/**
* @license React
* react-dom.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* react-is.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* react-jsx-runtime.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* react.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* scheduler.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @remix-run/router v1.16.0
*
* Copyright (c) Remix Software Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE.md file in the root directory of this source tree.
*
* @license MIT
*/
/**
* React Router DOM v6.23.0
*
* Copyright (c) Remix Software Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE.md file in the root directory of this source tree.
*
* @license MIT
*/
/**
* React Router v6.23.0
*
* Copyright (c) Remix Software Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE.md file in the root directory of this source tree.
*
* @license MIT
*/
/** @license React v16.13.1
* react-is.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */

View File

@ -1 +0,0 @@
[data-loading=""],[data-loading="delay|show"],[data-loading=show]{display:none}.toggle-btn{cursor:pointer;margin:0}.toggle-btn__icon--show{display:inline-block}.toggle-btn--active .toggle-btn__icon--show,.toggle-btn__icon--hide{display:none}.toggle-btn--active .toggle-btn__icon--hide{display:inline-block}.toggle-item{height:0;overflow:hidden}.toggle-item--active{height:auto}body,html{background:#f0f3f4;height:100%}body>div,html>div{padding:0!important}body>#overlay_loading,html>#overlay_loading{background:#fff;color:#666;float:left;height:100%;left:0;opacity:.8;padding-top:25%;position:fixed;text-align:center;top:0;width:100%;z-index:5000}body>#overlay_loading>.spinner,html>#overlay_loading>.spinner{animation:rotate .8s linear infinite;border:5px solid #b22222;border-radius:50%;border-right-color:transparent;height:64px;margin:0 auto;width:64px}@keyframes rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}i.fa.fa-lg.fa-fw.fa-question-circle{color:#007bff;font-size:1.6em}.toast-container{z-index:999999}.toast-container .toast-body{background:#fff}body>header>.header{background:#ea641b;box-shadow:0 2px 2px rgba(0,0,0,.05),0 1px 0 rgba(0,0,0,.05);color:#fff;left:0;margin:0;padding:10px;position:fixed;right:0;top:0;z-index:990}body>header>.header #help a{color:#fff;font-size:1.5em}body>header>.header>h4{margin:0}body>header>.header .form-group{margin-bottom:0}body>header>.header .btnLogout{background:#343a40!important;border:1px solid #fff}body>header>.header .btnTicket,body>header>.header .btnWiki{background:#343a40!important;border-bottom:1px solid #fff;border-left:1px solid #fff;border-top:1px solid #fff}.sideMenu{bottom:0;color:#aeb1bc;left:0;overflow-x:hidden;overflow-y:auto;padding:60px 0 0;position:fixed;top:0;z-index:100}.sideMenu h5{color:#fff}.sideMenu .collapse-menu{float:right;margin-right:10px;margin-top:5px}.sideMenu .nav{flex-wrap:nowrap!important}.sideMenu .nav>li{cursor:pointer}.sideMenu .nav>li>a{display:block;padding:5px}.sideMenu .nav>li>a:hover{background:#555;color:#fff;text-decoration:none}.sideMenu .nav>li>a:hover i{color:#fff}.sideMenu .nav>li>ul{display:none;margin-left:10px}.sideMenu .nav>li.open>ul{display:block}.sideMenu .nav li.active a,.sideMenu .nav li.active a i{color:#fff}.sideMenu a{color:#b4b6bd}.sideMenu a i{color:#898ba3}.content{margin-top:50px;padding:0 10px}.content h3,.content h4{margin:0}.content .header{background:#f6f8f8;border-bottom:1px solid #dee5e7;color:#373a3c;padding:10px}.content .body{padding:10px}.content .body .btn-default{background-color:#fff;border-color:#ccc;color:#333}.content .body .searchForm{margin-bottom:10px}.content .body .panel{background:#fff;border:1px solid #dee5e7;border-radius:2px;box-shadow:0 1px 1px rgba(0,0,0,.05);margin-top:10px}.content .body .panel>.header{background:#f6f8f8;border-bottom:1px solid #edf1f2;color:#333;padding:10px}.content .body .panel>.body{padding:10px}.content .body .panel>.body .tab-content{margin-top:10px}.content .body .panel>.body .nav-tabs .nav-item.open .nav-link,.content .body .panel>.body .nav-tabs .nav-item.open .nav-link:focus,.content .body .panel>.body .nav-tabs .nav-item.open .nav-link:hover,.content .body .panel>.body .nav-tabs .nav-link.active,.content .body .panel>.body .nav-tabs .nav-link.active:focus,.content .body .panel>.body .nav-tabs .nav-link.active:hover{background-color:#0275d8;border:1px solid;border-radius:4px;color:#fff}.content .body .panel>.body .overlay{background:rgba(234,100,27,.75);color:#444;font-size:xx-large;height:100%;margin:-5px;padding-top:150px;position:absolute;text-align:center;vertical-align:middle;width:100%;z-index:1}.content .body .panel>.body .table>tbody>tr.divider>td{background:#ea641b;height:2px;padding:0}.content .body .panel>.body .table .thead-dark th{background-color:#343a40}.content .body .panel>.body .table .thead-dark a{color:#fff;text-decoration:underline}.ajax-modal__body{height:80vh;padding:0}.no-margin-top{margin-top:0}.modal-lg{max-width:none;width:90vw}.bg-lightdanger{background-color:#ffcece}.bg-lightsuccess{background-color:#dbffdb}.bg-lightdark{background-color:#d3d3d3}.form-check{margin-bottom:12px}.thead-dark{color:#fff}.btn-group-xs>.btn,.btn-xs{border-radius:3px;font-size:12px;line-height:1.5;padding:1px 5px}

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,35 @@
"use strict";
(self["webpackChunk"] = self["webpackChunk"] || []).push([["backend/login"],{
/***/ "./assets/backend/login.ts":
/*!*********************************!*\
!*** ./assets/backend/login.ts ***!
\*********************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
exports.__esModule = true;
__webpack_require__(/*! ./login/login.css */ "./assets/backend/login/login.css");
/***/ }),
/***/ "./assets/backend/login/login.css":
/*!****************************************!*\
!*** ./assets/backend/login/login.css ***!
\****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
// extracted by mini-css-extract-plugin
/***/ })
},
/******/ __webpack_require__ => { // webpackRuntimeModules
/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
/******/ var __webpack_exports__ = (__webpack_exec__("./assets/backend/login.ts"));
/******/ }
]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC9sb2dpbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBYTs7QUFDYkEsa0JBQWtCLEdBQUcsSUFBSTtBQUN6QkUsbUJBQU8sQ0FBQywyREFBbUIsQ0FBQzs7Ozs7Ozs7Ozs7QUNGNUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9sb2dpbi50cyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9sb2dpbi9sb2dpbi5jc3M/MDZmMSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiLi9sb2dpbi9sb2dpbi5jc3NcIik7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiXSwibmFtZXMiOlsiZXhwb3J0cyIsIl9fZXNNb2R1bGUiLCJyZXF1aXJlIl0sInNvdXJjZVJvb3QiOiIifQ==

View File

@ -1,26 +1,35 @@
{ {
"entrypoints": { "entrypoints": {
"backend/dashboard": { "backend/login": {
"js": [ "js": [
"/apps/build/runtime.9f422cb9.js", "/apps/build/runtime.js",
"/apps/build/560.268023de.js", "/apps/build/backend/login.js"
"/apps/build/251.0fbe017d.js",
"/apps/build/backend/dashboard.7bf52039.js"
], ],
"css": [ "css": [
"/apps/build/251.a1ac5c17.css", "/apps/build/backend/login.css"
"/apps/build/backend/dashboard.1bdabc5b.css" ]
},
"backend/dashboard": {
"js": [
"/apps/build/runtime.js",
"/apps/build/vendors-node_modules_core-js_modules_es_array_concat_js-node_modules_core-js_modules_es_array-fb37e9.js",
"/apps/build/vendors-node_modules_popperjs_core_dist_cjs_popper_js-node_modules_symfony_stimulus-bridge_di-f31401.js",
"/apps/build/backend/dashboard.js"
],
"css": [
"/apps/build/vendors-node_modules_popperjs_core_dist_cjs_popper_js-node_modules_symfony_stimulus-bridge_di-f31401.css",
"/apps/build/backend/dashboard.css"
] ]
}, },
"plugins/system/psc/invoice": { "plugins/system/psc/invoice": {
"js": [ "js": [
"/apps/build/runtime.9f422cb9.js", "/apps/build/runtime.js",
"/apps/build/560.268023de.js", "/apps/build/vendors-node_modules_core-js_modules_es_array_concat_js-node_modules_core-js_modules_es_array-fb37e9.js",
"/apps/build/881.53c3c8c3.js", "/apps/build/vendors-var_plugins_System_PSC_Invoice_Webpack_node_modules_ebay_nice-modal-react_lib_esm_ind-73e7df.js",
"/apps/build/plugins/system/psc/invoice.18eac1b9.js" "/apps/build/plugins/system/psc/invoice.js"
], ],
"css": [ "css": [
"/apps/build/plugins/system/psc/invoice.19592370.css" "/apps/build/plugins/system/psc/invoice.css"
] ]
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -0,0 +1,3 @@
[ZoneTransfer]
ZoneId=3
HostUrl=https://gitlab.com/

View File

@ -1,15 +1,19 @@
{ {
"/apps/backend/dashboard.css": "/apps/build/backend/dashboard.1bdabc5b.css", "/apps/backend/login.css": "/apps/build/backend/login.css",
"/apps/backend/dashboard.js": "/apps/build/backend/dashboard.7bf52039.js", "/apps/backend/login.js": "/apps/build/backend/login.js",
"/apps/plugins/system/psc/invoice.css": "/apps/build/plugins/system/psc/invoice.19592370.css", "/apps/backend/dashboard.css": "/apps/build/backend/dashboard.css",
"/apps/plugins/system/psc/invoice.js": "/apps/build/plugins/system/psc/invoice.18eac1b9.js", "/apps/backend/dashboard.js": "/apps/build/backend/dashboard.js",
"/apps/runtime.js": "/apps/build/runtime.9f422cb9.js", "/apps/plugins/system/psc/invoice.css": "/apps/build/plugins/system/psc/invoice.css",
"/apps/560.268023de.js": "/apps/build/560.268023de.js", "/apps/plugins/system/psc/invoice.js": "/apps/build/plugins/system/psc/invoice.js",
"/apps/881.53c3c8c3.js": "/apps/build/881.53c3c8c3.js", "/apps/runtime.js": "/apps/build/runtime.js",
"/apps/251.a1ac5c17.css": "/apps/build/251.a1ac5c17.css", "/apps/vendors-node_modules_core-js_modules_es_array_concat_js-node_modules_core-js_modules_es_array-fb37e9.js": "/apps/build/vendors-node_modules_core-js_modules_es_array_concat_js-node_modules_core-js_modules_es_array-fb37e9.js",
"/apps/251.0fbe017d.js": "/apps/build/251.0fbe017d.js", "/apps/vendors-var_plugins_System_PSC_Invoice_Webpack_node_modules_ebay_nice-modal-react_lib_esm_ind-73e7df.js": "/apps/build/vendors-var_plugins_System_PSC_Invoice_Webpack_node_modules_ebay_nice-modal-react_lib_esm_ind-73e7df.js",
"/apps/vendors-node_modules_popperjs_core_dist_cjs_popper_js-node_modules_symfony_stimulus-bridge_di-f31401.css": "/apps/build/vendors-node_modules_popperjs_core_dist_cjs_popper_js-node_modules_symfony_stimulus-bridge_di-f31401.css",
"/apps/vendors-node_modules_popperjs_core_dist_cjs_popper_js-node_modules_symfony_stimulus-bridge_di-f31401.js": "/apps/build/vendors-node_modules_popperjs_core_dist_cjs_popper_js-node_modules_symfony_stimulus-bridge_di-f31401.js",
"/apps/fonts/summernote.eot": "/apps/build/fonts/summernote.7a3f9776.eot", "/apps/fonts/summernote.eot": "/apps/build/fonts/summernote.7a3f9776.eot",
"/apps/fonts/summernote.ttf": "/apps/build/fonts/summernote.eb23b6b7.ttf", "/apps/fonts/summernote.ttf": "/apps/build/fonts/summernote.eb23b6b7.ttf",
"/apps/fonts/summernote.woff": "/apps/build/fonts/summernote.f2bec4f2.woff", "/apps/fonts/summernote.woff": "/apps/build/fonts/summernote.f2bec4f2.woff",
"/apps/fonts/summernote.woff2": "/apps/build/fonts/summernote.f19578ae.woff2" "/apps/fonts/summernote.woff2": "/apps/build/fonts/summernote.f19578ae.woff2",
"/apps/images/logo.png": "/apps/build/images/logo.png",
"/apps/images/logo.png:Zone.Identifier": "/apps/build/images/logo.png:Zone.Identifier"
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
(()=>{"use strict";var e,r,t,o={},n={};function i(e){var r=n[e];if(void 0!==r)return r.exports;var t=n[e]={id:e,loaded:!1,exports:{}};return o[e].call(t.exports,t,t.exports,i),t.loaded=!0,t.exports}i.m=o,i.amdD=function(){throw new Error("define cannot be used indirect")},e=[],i.O=(r,t,o,n)=>{if(!t){var f=1/0;for(c=0;c<e.length;c++){for(var[t,o,n]=e[c],a=!0,l=0;l<t.length;l++)(!1&n||f>=n)&&Object.keys(i.O).every((e=>i.O[e](t[l])))?t.splice(l--,1):(a=!1,n<f&&(f=n));if(a){e.splice(c--,1);var u=o();void 0!==u&&(r=u)}}return r}n=n||0;for(var c=e.length;c>0&&e[c-1][2]>n;c--)e[c]=e[c-1];e[c]=[t,o,n]},i.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return i.d(r,{a:r}),r},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(e,o){if(1&o&&(e=this(e)),8&o)return e;if("object"==typeof e&&e){if(4&o&&e.__esModule)return e;if(16&o&&"function"==typeof e.then)return e}var n=Object.create(null);i.r(n);var f={};r=r||[null,t({}),t([]),t(t)];for(var a=2&o&&e;"object"==typeof a&&!~r.indexOf(a);a=t(a))Object.getOwnPropertyNames(a).forEach((r=>f[r]=()=>e[r]));return f.default=()=>e,i.d(n,f),n},i.d=(e,r)=>{for(var t in r)i.o(r,t)&&!i.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e={666:0};i.O.j=r=>0===e[r];var r=(r,t)=>{var o,n,[f,a,l]=t,u=0;if(f.some((r=>0!==e[r]))){for(o in a)i.o(a,o)&&(i.m[o]=a[o]);if(l)var c=l(i)}for(r&&r(t);u<f.length;u++)n=f[u],i.o(e,n)&&e[n]&&e[n][0](),e[n]=0;return i.O(c)},t=self.webpackChunk=self.webpackChunk||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),i.nc=void 0})();

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More