Fixes
This commit is contained in:
parent
7becbbf556
commit
83e50198b7
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
import "./login/login.css"
|
||||
@ -1,21 +0,0 @@
|
||||
@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;
|
||||
}
|
||||
|
||||
}
|
||||
72
src/new/package-lock.json
generated
72
src/new/package-lock.json
generated
@ -6,9 +6,11 @@
|
||||
"": {
|
||||
"license": "UNLICENSED",
|
||||
"dependencies": {
|
||||
"@alpinejs/persist": "^3.14.7",
|
||||
"@babel/core": "^7.20.2",
|
||||
"@babel/preset-env": "^7.20.2",
|
||||
"@popperjs/core": "^2.9.3",
|
||||
"alpinejs": "^3.14.7",
|
||||
"bootstrap": "^5.1.0",
|
||||
"bootstrap-toggle": "^2.2.2",
|
||||
"brace": "^0.11.1",
|
||||
@ -35,6 +37,7 @@
|
||||
"@tailwindcss/container-queries": "^0.1.1",
|
||||
"@tailwindcss/forms": "^0.5.9",
|
||||
"@tailwindcss/typography": "^0.5.15",
|
||||
"@types/alpinejs": "^3.13.11",
|
||||
"@types/node": "^18.7.6",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"chart.js": "^3.4.1 || ^4.0",
|
||||
@ -61,6 +64,12 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/@alpinejs/persist": {
|
||||
"version": "3.14.7",
|
||||
"resolved": "https://registry.npmjs.org/@alpinejs/persist/-/persist-3.14.7.tgz",
|
||||
"integrity": "sha512-MakPAI87flMcJro2LJEbq0wcpwgQMGxK9fx1hVaSC0jLinoUfKkoK4DzF6YJmqLVWKnca5ryO3Av1sWzPftQwQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@ampproject/remapping": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
|
||||
@ -3215,6 +3224,13 @@
|
||||
"node": ">=10.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/alpinejs": {
|
||||
"version": "3.13.11",
|
||||
"resolved": "https://registry.npmjs.org/@types/alpinejs/-/alpinejs-3.13.11.tgz",
|
||||
"integrity": "sha512-3KhGkDixCPiLdL3Z/ok1GxHwLxEWqQOKJccgaQL01wc0EVM2tCTaqlC3NIedmxAXkVzt/V6VTM8qPgnOHKJ1MA==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/aria-query": {
|
||||
"version": "4.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz",
|
||||
@ -3633,6 +3649,21 @@
|
||||
"dev": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/@vue/reactivity": {
|
||||
"version": "3.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz",
|
||||
"integrity": "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vue/shared": "3.1.5"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/shared": {
|
||||
"version": "3.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz",
|
||||
"integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@webassemblyjs/ast": {
|
||||
"version": "1.11.1",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
|
||||
@ -3964,6 +3995,15 @@
|
||||
"ajv": "^6.9.1"
|
||||
}
|
||||
},
|
||||
"node_modules/alpinejs": {
|
||||
"version": "3.14.7",
|
||||
"resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.14.7.tgz",
|
||||
"integrity": "sha512-ScnbydNBcWVnCiVupD3wWUvoMPm8244xkvDNMxVCspgmap9m4QuJ7pjc+77UtByU+1+Ejg0wzYkP4mQaOMcvng==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vue/reactivity": "~3.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/amdefine": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
|
||||
@ -13661,6 +13701,11 @@
|
||||
"integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
|
||||
"dev": true
|
||||
},
|
||||
"@alpinejs/persist": {
|
||||
"version": "3.14.7",
|
||||
"resolved": "https://registry.npmjs.org/@alpinejs/persist/-/persist-3.14.7.tgz",
|
||||
"integrity": "sha512-MakPAI87flMcJro2LJEbq0wcpwgQMGxK9fx1hVaSC0jLinoUfKkoK4DzF6YJmqLVWKnca5ryO3Av1sWzPftQwQ=="
|
||||
},
|
||||
"@ampproject/remapping": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
|
||||
@ -15675,6 +15720,12 @@
|
||||
"integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/alpinejs": {
|
||||
"version": "3.13.11",
|
||||
"resolved": "https://registry.npmjs.org/@types/alpinejs/-/alpinejs-3.13.11.tgz",
|
||||
"integrity": "sha512-3KhGkDixCPiLdL3Z/ok1GxHwLxEWqQOKJccgaQL01wc0EVM2tCTaqlC3NIedmxAXkVzt/V6VTM8qPgnOHKJ1MA==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/aria-query": {
|
||||
"version": "4.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz",
|
||||
@ -16059,6 +16110,19 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"@vue/reactivity": {
|
||||
"version": "3.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz",
|
||||
"integrity": "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==",
|
||||
"requires": {
|
||||
"@vue/shared": "3.1.5"
|
||||
}
|
||||
},
|
||||
"@vue/shared": {
|
||||
"version": "3.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz",
|
||||
"integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA=="
|
||||
},
|
||||
"@webassemblyjs/ast": {
|
||||
"version": "1.11.1",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
|
||||
@ -16334,6 +16398,14 @@
|
||||
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
|
||||
"requires": {}
|
||||
},
|
||||
"alpinejs": {
|
||||
"version": "3.14.7",
|
||||
"resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.14.7.tgz",
|
||||
"integrity": "sha512-ScnbydNBcWVnCiVupD3wWUvoMPm8244xkvDNMxVCspgmap9m4QuJ7pjc+77UtByU+1+Ejg0wzYkP4mQaOMcvng==",
|
||||
"requires": {
|
||||
"@vue/reactivity": "~3.1.1"
|
||||
}
|
||||
},
|
||||
"amdefine": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
|
||||
|
||||
@ -11,6 +11,7 @@
|
||||
"@tailwindcss/container-queries": "^0.1.1",
|
||||
"@tailwindcss/forms": "^0.5.9",
|
||||
"@tailwindcss/typography": "^0.5.15",
|
||||
"@types/alpinejs": "^3.13.11",
|
||||
"@types/node": "^18.7.6",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"chart.js": "^3.4.1 || ^4.0",
|
||||
@ -32,9 +33,11 @@
|
||||
"build": "encore production --progress"
|
||||
},
|
||||
"dependencies": {
|
||||
"@alpinejs/persist": "^3.14.7",
|
||||
"@babel/core": "^7.20.2",
|
||||
"@babel/preset-env": "^7.20.2",
|
||||
"@popperjs/core": "^2.9.3",
|
||||
"alpinejs": "^3.14.7",
|
||||
"bootstrap": "^5.1.0",
|
||||
"bootstrap-toggle": "^2.2.2",
|
||||
"brace": "^0.11.1",
|
||||
|
||||
@ -14,6 +14,8 @@
|
||||
namespace PSC\Backend\DashboardBundle\Controller;
|
||||
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use PSC\Shop\ContactBundle\Repository\ContactRepository;
|
||||
use PSC\Shop\OrderBundle\Service\Order;
|
||||
use PSC\Shop\QueueBundle\Service\Queue\Manager;
|
||||
use PSC\System\SettingsBundle\Service\Instance;
|
||||
use PSC\System\SettingsBundle\Service\Shop;
|
||||
@ -48,7 +50,7 @@ class DashboardController extends AbstractController
|
||||
#[Security("is_granted('ROLE_SHOP')")]
|
||||
#[Route(path: '/dashboard', name: 'psc_backend_dashboard_index')]
|
||||
#[Template]
|
||||
public function indexAction(Migration $migration, Shop $shop, EntityManagerInterface $entityManager, Manager $queueService, Instance $instanceService, ChartBuilderInterface $chartBuilder)
|
||||
public function indexAction(Migration $migration, Shop $shop, EntityManagerInterface $entityManager, Manager $queueService, Instance $instanceService, ChartBuilderInterface $chartBuilder, ContactRepository $contactRepository, Order $orderService)
|
||||
{
|
||||
|
||||
/** @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */
|
||||
@ -119,6 +121,8 @@ class DashboardController extends AbstractController
|
||||
return array(
|
||||
'user' => $this->getUser(),
|
||||
'shop' => $selectedShop,
|
||||
'lastContacts' => $contactRepository->getLastCreatedContacts($selectedShop, 10),
|
||||
'lastOrders' => $orderService->getLastOrders(),
|
||||
'queueErrorCount' => $queueService->getErrorJobCount(),
|
||||
'instance' => $instanceService->getInstance(),
|
||||
'chart' => $chart
|
||||
|
||||
@ -20,12 +20,9 @@ use PSC\System\SettingsBundle\Service\Shop;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\RedirectResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
||||
use Symfony\Component\Routing\Attribute\Route;
|
||||
|
||||
/**
|
||||
* ShopController fürs ProductionBundle
|
||||
@ -35,16 +32,6 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
||||
*/
|
||||
class ShopController extends AbstractController
|
||||
{
|
||||
/**
|
||||
* Meine Shops
|
||||
*
|
||||
*
|
||||
*
|
||||
* @param Request $request
|
||||
* @param Shop $shop
|
||||
* @return array
|
||||
* @throws \Doctrine\ORM\ORMException
|
||||
*/
|
||||
#[Security("is_granted('ROLE_SHOP')")]
|
||||
#[Template]
|
||||
public function myEditableShopsAction(Request $request, Shop $shop, JWTTokenManagerInterface $jwtManager, EntityManagerInterface $entityManager)
|
||||
@ -58,13 +45,34 @@ class ShopController extends AbstractController
|
||||
->getRepository(Domain::class)->getAllByShopId($selectedShop);
|
||||
if (count($domains) > 0) {
|
||||
$domain = array_pop($domains)->getHost();
|
||||
}else{
|
||||
} else {
|
||||
$domain = false;
|
||||
}
|
||||
|
||||
return array('domain' => $domain, 'shops' => $shops, 'jwt' => $jwtManager->create($this->getUser()), 'selectedShop' => $selectedShop, 'displayDeletedShop' => $request->getSession()->get('displayDeletedShop', false));
|
||||
}
|
||||
|
||||
#[Security("is_granted('ROLE_SHOP')")]
|
||||
#[Template]
|
||||
public function myEditableShopsTailwindAction(Request $request, Shop $shop, JWTTokenManagerInterface $jwtManager, EntityManagerInterface $entityManager)
|
||||
{
|
||||
|
||||
/** @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */
|
||||
$selectedShop = $shop->getSelectedShop();
|
||||
$shops = $shop->getMyEditableShops();
|
||||
|
||||
$domains = $entityManager
|
||||
->getRepository(Domain::class)->getAllByShopId($selectedShop);
|
||||
if (count($domains) > 0) {
|
||||
$domain = array_pop($domains)->getHost();
|
||||
} else {
|
||||
$domain = false;
|
||||
}
|
||||
|
||||
return array('domain' => $domain, 'shops' => $shops, 'jwt' => $jwtManager->create($this->getUser()), 'selectedShop' => $selectedShop, 'displayDeletedShop' => $request->getSession()->get('displayDeletedShop', false));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Change Shop
|
||||
*
|
||||
@ -76,7 +84,7 @@ class ShopController extends AbstractController
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
#[Security("is_granted('ROLE_SHOP')")]
|
||||
#[route(path: '/shop/change/{shop_uuid}', name: 'psc_backend_dashboard_shop_change')]
|
||||
#[Route(path: '/shop/change/{shop_uuid}', name: 'psc_backend_dashboard_shop_change')]
|
||||
public function changeShopAction(Request $request, EntityManagerInterface $em, \Symfony\Component\Security\Core\Security $security, $shop_uuid)
|
||||
{
|
||||
$em
|
||||
@ -98,7 +106,7 @@ class ShopController extends AbstractController
|
||||
* @throws \Doctrine\ORM\ORMException
|
||||
*/
|
||||
#[Security("is_granted('ROLE_SHOP')")]
|
||||
#[route(path: '/shop/deleted/toogle', name: 'psc_backend_dashboard_toogle_deleted_shop')]
|
||||
#[Route(path: '/shop/deleted/toogle', name: 'psc_backend_dashboard_toogle_deleted_shop')]
|
||||
public function toogleDisplayDeletedShopAction(Request $request, EntityManagerInterface $em, \Symfony\Component\Security\Core\Security $security, Shop $shopService)
|
||||
{
|
||||
/** @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */
|
||||
|
||||
@ -7,4 +7,5 @@ psc_backend_dashboard:
|
||||
password: Passwort
|
||||
username: Benutzername
|
||||
login: Anmelden
|
||||
|
||||
new customer: Neue Kunden
|
||||
new orders: Neue Aufträge
|
||||
|
||||
@ -1,66 +1,143 @@
|
||||
{% extends 'backend_base.html.twig' %}
|
||||
{% extends 'backend_tailwind_base.html.twig' %}
|
||||
{% block containerdiv %}max-w-7xl{% endblock %}
|
||||
|
||||
{% block header %}
|
||||
<h1 class="text-psc text-2xl font-medium"><i class="fas fa-chalkboard mr-1"></i>Dashboard</h1>
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
|
||||
<div class="header">
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
|
||||
<h3>
|
||||
<i class="fa-fw fa fa-chalkboard"></i> Dashboard <span>> My Dashboard</span>
|
||||
</h3>
|
||||
<div class="grid grid-cols-1 lg:grid-cols-2 filament-widgets-container gap-4 lg:gap-8 mb-6">
|
||||
{% if is_granted('ROLE_ADMIN') %}
|
||||
<div class="bg-white rounded-xl shadow dark:border-gray-600 dark:bg-gray-800">
|
||||
<div class="p-2 space-y-2">
|
||||
<div class="flex items-center justify-between gap-8 px-4 py-2 mb-2">
|
||||
<h2 class="text-xl font-medium tracking-tight filament-card-heading">
|
||||
Info
|
||||
</h2>
|
||||
</div>
|
||||
<div aria-hidden="true" class="filament-hr border-t dark:border-gray-700"></div>
|
||||
</div>
|
||||
<table class=" w-full text-start divide-y table-auto">
|
||||
<tbody class="divide-y">
|
||||
<tr><td class="px-4 py-3">{{ 'psc_backend_dashboard.Name'|trans }}:</td><td class="px-4 py-3">{{ shop.title }}</td></tr>
|
||||
<tr><td class="px-4 py-3">{{ 'psc_backend_dashboard.Beschreibung'|trans }}:</td><td class="px-4 py-3">{{ shop.description }}</td></tr>
|
||||
<tr><td class="px-4 py-3">{{ 'psc_backend_dashboard.Layout'|trans }}:</td><td class="px-4 py-3">{{ shop.layout }}</td></tr>
|
||||
<tr><td class="px-4 py-3">{{ 'psc_backend_dashboard.UID'|trans }}:</td><td class="px-4 py-3">{{ shop.uid }}</td></tr>
|
||||
<tr><td class="px-4 py-3">{{ 'psc_backend_dashboard.UUID'|trans }}:</td><td class="px-4 py-3">{{ shop.uuid }}</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="body">
|
||||
|
||||
|
||||
{% if is_granted('ROLE_ADMIN') %}
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<div class="panel">
|
||||
<div class="header">
|
||||
<h4>Infos</h4>
|
||||
<div class="bg-white rounded-xl shadow dark:border-gray-600 dark:bg-gray-800">
|
||||
<div class="p-2 space-y-2">
|
||||
<div class="flex items-center justify-between gap-8 px-4 py-2 mb-2">
|
||||
<h2 class="text-xl font-medium tracking-tight filament-card-heading">
|
||||
Warnhinweise
|
||||
</h2>
|
||||
</div>
|
||||
<div class="body">
|
||||
<table class="table">
|
||||
<tr><td>{{ 'psc_backend_dashboard.Name'|trans }}:</td><td>{{ shop.title }}</td></tr>
|
||||
<tr><td>{{ 'psc_backend_dashboard.Beschreibung'|trans }}:</td><td>{{ shop.description }}</td></tr>
|
||||
<tr><td>{{ 'psc_backend_dashboard.Layout'|trans }}:</td><td>{{ shop.layout }}</td></tr>
|
||||
<tr><td>{{ 'psc_backend_dashboard.UID'|trans }}:</td><td>{{ shop.uid }}</td></tr>
|
||||
<tr><td>{{ 'psc_backend_dashboard.UUID'|trans }}:</td><td>{{ shop.uuid }}</td></tr>
|
||||
</table>
|
||||
<div aria-hidden="true" class="filament-hr border-t dark:border-gray-700"></div>
|
||||
</div>
|
||||
<table class="w-full text-start divide-y table-auto">
|
||||
<tbody>
|
||||
<tr><td class="px-4 py-3">Aktionen:</td><td class="px-4 py-3"><p>{% if queueErrorCount > 0 %}<span class="bg-red-100 text-red-800 text-xs font-medium mr-2 px-2.5 py-0.5 rounded">{{ queueErrorCount }}</span>{% else %}<span class="bg-green-100 text-green-800 text-xs font-medium mr-2 px-2.5 py-0.5 rounded">Alles Ok</span>{% endif %}</p></td></tr>
|
||||
<tr><td class="px-4 py-3">Mailserver:</td><td class="px-4 py-3"><p>{% if not instance.isSmtpOwn %}<span class="bg-red-100 text-red-800 text-xs font-medium mr-2 px-2.5 py-0.5 rounded">Kein eigener definiert</span>{% else %}{% if instance.smtpHost == '' or instance.smtpPort == '' or instance.smtpUsername == '' or instance.smtpPassword == '' %}<span class="bg-yellow-500 text-yellow-800 text-xs font-medium mr-2 px-2.5 py-0.5 rounded">Smtp Einstellungen überprüfen</span>{% else %}<span class="bg-green-100 text-green-800 text-xs font-medium mr-2 px-2.5 py-0.5 rounded">Alles Ok</span>{% endif %}{% endif %}</p></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="col-span-full">
|
||||
<div class="p-2 space-y-2 bg-white rounded-xl shadow dark:border-gray-600 dark:bg-gray-800">
|
||||
<div class="p-2 space-y-2">
|
||||
<div class="flex items-center justify-between gap-8 px-4 py-2 mb-2">
|
||||
<h2 class="text-xl font-medium tracking-tight filament-card-heading">
|
||||
Umsatz
|
||||
</h2>
|
||||
</div>
|
||||
<div aria-hidden="true" class="filament-hr border-t dark:border-gray-700"></div>
|
||||
</div>
|
||||
<div id="sales-graph" class="chart no-padding">{{ render_chart(chart) }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4">
|
||||
<div class="panel">
|
||||
<div class="header">
|
||||
<h4>Warnhinweise</h4>
|
||||
</div>
|
||||
<div class="body">
|
||||
<table class="table">
|
||||
<tr><td>Aktionen:</td><td><p>{% if queueErrorCount > 0 %}<span class="badge rounded-pill bg-danger">{{ queueErrorCount }}</span>{% else %}<span class="badge rounded-pill bg-success">Alles Ok</span>{% endif %}</p></td></tr>
|
||||
<tr><td>Mailserver:</td><td><p>{% if not instance.isSmtpOwn %}<span class="badge rounded-pill bg-warning">Kein eigener definiert</span>{% else %}{% if instance.smtpHost == '' %}<span class="badge rounded-pill bg-danger">Smtp Einstellungen überprüfen</span>{% else %}<a href="{{ path("psc_backend_system_settings_index") }}" class="badge rounded-pill bg-success">Eigener SMTP eingetragen</a> <a target="_blank" href="{{ path("psc_backend_system_settings_smtptest") }}">Testen</a>{% endif %}{% endif %}</p></td></tr>
|
||||
</table>
|
||||
<div class="bg-white rounded-xl shadow dark:border-gray-600 dark:bg-gray-800">
|
||||
<div class="p-2 space-y-2">
|
||||
<div class="flex items-center justify-between gap-8 px-4 py-2 mb-2">
|
||||
<h2 class="text-xl font-medium tracking-tight filament-card-heading">
|
||||
{{ 'psc_backend_dashboard.new customer'|trans}}
|
||||
</h2>
|
||||
</div>
|
||||
<div aria-hidden="true" class="filament-hr border-t dark:border-gray-700"></div>
|
||||
</div>
|
||||
<table class=" w-full text-start divide-y table-auto">
|
||||
<tbody class="divide-y">
|
||||
{% for contact in lastContacts %}
|
||||
{% if contact.email != 'sysadmin@printshopcreator.de' %}
|
||||
<tr>
|
||||
<td class="px-4 py-3">
|
||||
<div>{{ contact.company }} {{contact.firstname }} {{ contact.lastname }}</div>
|
||||
<div class="text-sm text-gray-500">{{contact.email}}</div>
|
||||
</td>
|
||||
<td class="">
|
||||
<div>
|
||||
{{contact.createdAt|date("d.m.Y")}}
|
||||
</div>
|
||||
<div class="text-sm text-gray-500">
|
||||
{{contact.createdAt|date("H:m:s")}}
|
||||
</div>
|
||||
</td>
|
||||
<td class="text-end px-4 py-3">
|
||||
<a href="{{ path("psc_shop_contact_backend_edit", {uuid: contact.uuid}) }}" class="text-gray-900 bg-gray-100 hover:bg-gray-200 focus:ring-4 focus:outline-none focus:ring-gray-100 font-medium rounded-lg text-sm px-5 py-2.5 text-center inline-flex items-center dark:focus:ring-gray-500">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-4 h-4 text-psc">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L10.582 16.07a4.5 4.5 0 0 1-1.897 1.13L6 18l.8-2.685a4.5 4.5 0 0 1 1.13-1.897l8.932-8.931Zm0 0L19.5 7.125M18 14v4.75A2.25 2.25 0 0 1 15.75 21H5.25A2.25 2.25 0 0 1 3 18.75V8.25A2.25 2.25 0 0 1 5.25 6H10" />
|
||||
</svg>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="panel">
|
||||
<div class="header">
|
||||
<h4>Sales Graph</h4>
|
||||
<div class="bg-white rounded-xl shadow dark:border-gray-600 dark:bg-gray-800">
|
||||
<div class="p-2 space-y-2">
|
||||
<div class="flex items-center justify-between gap-8 px-4 py-2 mb-2">
|
||||
<h2 class="text-xl font-medium tracking-tight filament-card-heading">
|
||||
{{ 'psc_backend_dashboard.new orders'|trans}}
|
||||
</h2>
|
||||
</div>
|
||||
<div aria-hidden="true" class="filament-hr border-t dark:border-gray-700"></div>
|
||||
</div>
|
||||
<table class=" w-full text-start divide-y table-auto">
|
||||
<tbody class="divide-y">
|
||||
{% for order in lastOrders %}
|
||||
<tr>
|
||||
<td class="px-4 py-3">
|
||||
<div>{{ order.alias }} {{order.invoiceAddress.firstname }} {{ order.invoiceAddress.lastname }}</div>
|
||||
<div class="text-sm text-gray-500">{{order.invoiceAddress.email}}</div>
|
||||
</td>
|
||||
<td class="">
|
||||
<div>
|
||||
{{order.created|date("d.m.Y")}}
|
||||
</div>
|
||||
<div class="text-sm text-gray-500">
|
||||
{{order.created|date("H:m:s")}}
|
||||
</div>
|
||||
</td>
|
||||
<td class="text-end px-4 py-3">
|
||||
<a href="{{ path("psc_shop_contact_backend_edit", {uuid: order.uuid}) }}" class="text-gray-900 bg-gray-100 hover:bg-gray-200 focus:ring-4 focus:outline-none focus:ring-gray-100 font-medium rounded-lg text-sm px-5 py-2.5 text-center inline-flex items-center dark:focus:ring-gray-500">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-4 h-4 text-psc">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L10.582 16.07a4.5 4.5 0 0 1-1.897 1.13L6 18l.8-2.685a4.5 4.5 0 0 1 1.13-1.897l8.932-8.931Zm0 0L19.5 7.125M18 14v4.75A2.25 2.25 0 0 1 15.75 21H5.25A2.25 2.25 0 0 1 3 18.75V8.25A2.25 2.25 0 0 1 5.25 6H10" />
|
||||
</svg>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="body">
|
||||
{{ render_chart(chart) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
||||
@ -16,7 +16,8 @@ namespace PSC\Shop\ContactBundle\Repository;
|
||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||
use Doctrine\Persistence\ManagerRegistry;
|
||||
use PSC\Shop\EntityBundle\Entity\Contact;
|
||||
use PSC\Shop\EntityBundle\Entity\Shop;
|
||||
use PSC\Shop\EntityBundle\Entity\Shop as PSCShop;
|
||||
use PSC\System\SettingsBundle\Service\Shop;
|
||||
use Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface;
|
||||
use Symfony\Component\Security\Core\Exception\CustomUserMessageAuthenticationException;
|
||||
use Symfony\Component\Security\Core\Exception\UserNotFoundException;
|
||||
@ -169,4 +170,22 @@ class ContactRepository extends ServiceEntityRepository implements UserLoaderInt
|
||||
|
||||
return $user;
|
||||
}
|
||||
public function getLastCreatedContacts(PSCShop $selectedShop, int $limit): array
|
||||
{
|
||||
|
||||
$query = $this->getEntityManager()
|
||||
->createQuery('
|
||||
SELECT c FROM PSCEntityBundle:Contact c
|
||||
JOIN c.shops s
|
||||
WHERE s.uid = :id ORDER BY c.createdAt DESC')
|
||||
->setParameter('id', $selectedShop->getUid())
|
||||
->setMaxResults($limit);
|
||||
try {
|
||||
$contacts = $query->execute();
|
||||
|
||||
return $contacts;
|
||||
} catch (\Doctrine\ORM\NoResultException $e) {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -283,6 +283,27 @@ class Order
|
||||
|
||||
}
|
||||
|
||||
public function getLastOrders(int $limit = 10): array
|
||||
{
|
||||
$query = $this->entityManager
|
||||
->createQuery('
|
||||
SELECT c FROM PSCEntityBundle:Order c
|
||||
JOIN c.shop s
|
||||
WHERE s.uid = :id ORDER BY c.created DESC')
|
||||
->setParameter('id', $this->shopService->getSelectedShop()->getUid())
|
||||
->setMaxResults($limit);
|
||||
try {
|
||||
$orders = $query->execute();
|
||||
$tmp = [];
|
||||
foreach ($orders as $order) {
|
||||
$tmp[] = $this->getOrderByUid($order->getUid());
|
||||
}
|
||||
return $tmp;
|
||||
} catch (\Doctrine\ORM\NoResultException $e) {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
public function getOrderByUuid($uuid, $load_only_order = false): PSCBase
|
||||
{
|
||||
$this->load_only_order = $load_only_order;
|
||||
|
||||
@ -14,15 +14,8 @@
|
||||
namespace PSC\System\SettingsBundle\Controller;
|
||||
|
||||
use Doctrine\ODM\MongoDB\DocumentManager;
|
||||
use PSC\Shop\EntityBundle\Document\Instance;
|
||||
use PSC\Shop\QueueBundle\Service\Queue\Manager;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\RedirectResponse;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
||||
|
||||
/**
|
||||
@ -33,14 +26,6 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
|
||||
*/
|
||||
class FtpController extends AbstractController
|
||||
{
|
||||
/**
|
||||
* Meine Ftp Daten
|
||||
*
|
||||
*
|
||||
*
|
||||
* @param DocumentManager $mongoManager
|
||||
* @return array
|
||||
*/
|
||||
#[Security("is_granted('ROLE_ADMIN')")]
|
||||
#[Template]
|
||||
public function myDataAction(DocumentManager $mongoManager)
|
||||
@ -48,4 +33,12 @@ class FtpController extends AbstractController
|
||||
|
||||
return array();
|
||||
}
|
||||
|
||||
#[Security("is_granted('ROLE_ADMIN')")]
|
||||
#[Template]
|
||||
public function myDataTailwindAction(DocumentManager $mongoManager)
|
||||
{
|
||||
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
||||
@ -20,6 +20,9 @@
|
||||
"suppressImplicitAnyIndexErrors": true,
|
||||
"sourceMap": false,
|
||||
"allowSyntheticDefaultImports": true
|
||||
}
|
||||
},
|
||||
"exclude": [
|
||||
"./var/plugins/",
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
@ -16,7 +16,7 @@ export default defineConfig({
|
||||
},
|
||||
|
||||
build: {
|
||||
outDir: '../Resources/public',
|
||||
outDir: '../Resources/public/invoiceapp',
|
||||
emptyOutDir: true, // also necessary
|
||||
}
|
||||
})
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
#root{max-width:1280px;margin:0 auto;padding:2rem;text-align:center}.logo{height:6em;padding:1.5em;will-change:filter;transition:filter .3s}.logo:hover{filter:drop-shadow(0 0 2em #646cffaa)}.logo.react:hover{filter:drop-shadow(0 0 2em #61dafbaa)}@keyframes logo-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (prefers-reduced-motion: no-preference){a:nth-of-type(2) .logo{animation:logo-spin infinite 20s linear}}.card{padding:2em}.read-the-docs{color:#888}:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;background-color:#242424;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}
|
||||
@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="35.93" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 228"><path fill="#00D8FF" d="M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167.467 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266c13.744 7.926 36.812-.22 59.273-19.855a145.567 145.567 0 0 0 5.342-4.923a168.064 168.064 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586c13.731-7.949 18.194-32.003 12.4-61.268a145.016 145.016 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488c29.348-9.723 48.443-25.443 48.443-41.52c0-15.417-17.868-30.326-45.517-39.844Zm-6.365 70.984c-1.4.463-2.836.91-4.3 1.345c-3.24-10.257-7.612-21.163-12.963-32.432c5.106-11 9.31-21.767 12.459-31.957c2.619.758 5.16 1.557 7.61 2.4c23.69 8.156 38.14 20.213 38.14 29.504c0 9.896-15.606 22.743-40.946 31.14Zm-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787c-1.524 8.219-4.59 13.698-8.382 15.893c-8.067 4.67-25.32-1.4-43.927-17.412a156.726 156.726 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246c12.376-1.098 24.068-2.894 34.671-5.345a134.17 134.17 0 0 1 1.386 6.193ZM87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675c-8.075-4.657-11.432-22.636-6.853-46.752a156.923 156.923 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994c7.084 9.967 14.501 19.128 21.976 27.15a134.668 134.668 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94ZM50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863c-6.35-5.437-9.555-10.836-9.555-15.216c0-9.322 13.897-21.212 37.076-29.293c2.813-.98 5.757-1.905 8.812-2.773c3.204 10.42 7.406 21.315 12.477 32.332c-5.137 11.18-9.399 22.249-12.634 32.792a134.718 134.718 0 0 1-6.318-1.979Zm12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789c8.564-4.958 27.502 2.111 47.463 19.835a144.318 144.318 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988c-12.04 1.116-23.565 2.908-34.161 5.309a160.342 160.342 0 0 1-1.76-7.887Zm110.427 27.268a347.8 347.8 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08c-2.206 7.072-4.956 14.465-8.193 22.045a381.151 381.151 0 0 0-7.365-13.322Zm-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322.04 322.04 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18ZM82.802 87.83a323.167 323.167 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152c7.304-1.634 15.093-2.97 23.209-3.984a321.524 321.524 0 0 0-7.848 12.897Zm8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793c2.26-7.3 5.045-14.885 8.298-22.6a321.187 321.187 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147Zm37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433c4.902.192 9.899.29 14.978.29c5.218 0 10.376-.117 15.453-.343c-4.985 6.774-10.018 12.97-15.028 18.486Zm52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52c-7.422 1.694-15.436 3.058-23.88 4.071a382.417 382.417 0 0 0 7.859-13.026a347.403 347.403 0 0 0 7.425-13.565Zm-16.898 8.101a358.557 358.557 0 0 1-12.281 19.815a329.4 329.4 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310.202 310.202 0 0 1-12.513-19.846h.001a307.41 307.41 0 0 1-10.923-20.627a310.278 310.278 0 0 1 10.89-20.637l-.001.001a307.318 307.318 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329.357 329.357 0 0 1 12.335 19.695a358.489 358.489 0 0 1 11.036 20.54a329.472 329.472 0 0 1-11 20.722Zm22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026c-.344 1.668-.73 3.367-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408c-7.034-10.017-14.323-19.124-21.64-27.008a160.789 160.789 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3ZM128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86s-22.86-10.235-22.86-22.86s10.235-22.86 22.86-22.86Z"></path></svg>
|
||||
|
Before Width: | Height: | Size: 4.0 KiB |
@ -1,14 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="./vite.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Vite + React + TS</title>
|
||||
<script type="module" crossorigin src="./assets/index-0CZfAX1X.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="./assets/index-DiwrgTda.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB |
@ -7,10 +7,9 @@
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
<base href="/apps/backend/component/invoice/index/create/"/>
|
||||
|
||||
<link rel="stylesheet" href="/apps/bundles/pluginsystempscinvoice/invoicets/assets/index.js"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
{% block stylesheets %}
|
||||
{{ encore_entry_link_tags('plugins/system/psc/invoice') }}
|
||||
{% endblock %}
|
||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
|
||||
<!-- GOOGLE FONT -->
|
||||
@ -22,7 +21,7 @@
|
||||
<script>
|
||||
var jwt_token = '{{ jwt }}';
|
||||
</script>
|
||||
{{ encore_entry_script_tags('plugins/system/psc/invoice') }}
|
||||
<script src="/apps/bundles/pluginsystempscinvoice/invoicets/assets/index.js"></script>
|
||||
{% endblock %}
|
||||
</body>
|
||||
</html>
|
||||
@ -1,11 +0,0 @@
|
||||
import "reflect-metadata";
|
||||
//import './src/css/style.scss'
|
||||
import './src/css/output.css'
|
||||
import * as $ from "jquery";
|
||||
import { App } from "./src/app/app";
|
||||
|
||||
declare var jwt_token: String;
|
||||
|
||||
let app = new App(jwt_token);
|
||||
app.init();
|
||||
app.run();
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,48 +0,0 @@
|
||||
{
|
||||
"name": "webpack",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@ebay/nice-modal-react": "^1.2.13",
|
||||
"@react-icons/all-files": "^4.1.0",
|
||||
"@rjsf/core": "^5.18.3",
|
||||
"@rjsf/utils": "^5.18.3",
|
||||
"@rjsf/validator-ajv6": "^5.18.3",
|
||||
"@types/react": "^18.3.1",
|
||||
"@types/react-dom": "^18.3.0",
|
||||
"@types/styled-components": "^5.1.34",
|
||||
"axios": "^1.6.8",
|
||||
"debounce-promise": "^3.1.2",
|
||||
"eta": "^3.4.0",
|
||||
"flowbite": "^2.3.0",
|
||||
"flowbite-react": "^0.9.0",
|
||||
"i18next": "^23.11.3",
|
||||
"prop-types": "^15.8.1",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-i18next": "^14.1.1",
|
||||
"react-router-dom": "^6.23.0",
|
||||
"react-select": "^5.8.0",
|
||||
"react-select-async-paginate": "^0.7.4",
|
||||
"reflect-metadata": "^0.2.2",
|
||||
"rxjs": "^7.8.1",
|
||||
"styled-components": "^6.1.11",
|
||||
"tsyringe": "^4.8.0",
|
||||
"use-debounce": "^10.0.0",
|
||||
"uuid": "^9.0.1",
|
||||
"zustand": "^4.5.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jquery": "^3.5.30",
|
||||
"@types/uuid": "^10.0.0",
|
||||
"autoprefixer": "^10.4.19",
|
||||
"postcss": "^8.4.38",
|
||||
"tailwindcss": "^3.4.3"
|
||||
}
|
||||
}
|
||||
@ -1,6 +0,0 @@
|
||||
module.exports = {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
autoprefixer: {},
|
||||
},
|
||||
}
|
||||
@ -1,47 +0,0 @@
|
||||
import * as Eta from 'eta'
|
||||
import { Token } from '../services/token'
|
||||
import {container} from "tsyringe"
|
||||
import React from 'react'
|
||||
import ReactDOM from 'react-dom/client'
|
||||
import NiceModal from "@ebay/nice-modal-react"
|
||||
import BaseComponent from '../modules/base/BaseComponent'
|
||||
import {Route, HashRouter as Router, Routes, useSearchParams} from "react-router-dom"
|
||||
|
||||
export class App {
|
||||
private searchParams: any
|
||||
private setSearchParams: any
|
||||
|
||||
|
||||
constructor(jwt: String) {
|
||||
let token = container.resolve(Token)
|
||||
console.log(jwt)
|
||||
token.currentToken = jwt
|
||||
token.init()
|
||||
}
|
||||
|
||||
init(): void {
|
||||
|
||||
this.buildUi()
|
||||
}
|
||||
|
||||
buildUi() {
|
||||
const root = ReactDOM.createRoot(document.getElementById('root'))
|
||||
|
||||
root.render(
|
||||
<NiceModal.Provider>
|
||||
<Router>
|
||||
<Routes>
|
||||
<Route path="/" element={<BaseComponent />} />
|
||||
<Route path="/:uuid" element={<BaseComponent />} />
|
||||
</Routes>
|
||||
</Router>
|
||||
</NiceModal.Provider>
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
run(): void {
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,4 +0,0 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
@ -1,55 +0,0 @@
|
||||
import { Subject, Observable, Subscription } from 'rxjs'
|
||||
|
||||
export function observeObject<T extends Object>(obj: T): [T, Observable<T>] {
|
||||
/// Variables
|
||||
const changes$ = new Subject<T>()
|
||||
const propertySubscriptions = new Map<PropertyKey, Subscription>()
|
||||
|
||||
/// Helper Functions
|
||||
const observeChildObject = <U extends {}>(
|
||||
target: T,
|
||||
prop: PropertyKey,
|
||||
childVal: U
|
||||
): U => {
|
||||
const [childProxy, childChanges$] = observeObject(childVal)
|
||||
const sub = childChanges$.subscribe(childObj => changes$.next(target))
|
||||
propertySubscriptions.set(prop, sub)
|
||||
return childProxy
|
||||
}
|
||||
const stopObservingChildObject = prop => {
|
||||
propertySubscriptions.get(prop).unsubscribe()
|
||||
propertySubscriptions.delete(prop)
|
||||
}
|
||||
|
||||
/// Proxy Creation
|
||||
const proxy = new Proxy({} as T, {
|
||||
set: (target, prop, value, receiver) => {
|
||||
// If property is changed TO an object.
|
||||
if (typeof value === 'object' && !propertySubscriptions.has(prop)) {
|
||||
value = observeChildObject(target, prop, value)
|
||||
}
|
||||
// If property is changed FROM an object.
|
||||
else if (typeof value !== 'object' && propertySubscriptions.has(prop)) {
|
||||
stopObservingChildObject(prop)
|
||||
}
|
||||
const returnVal = Reflect.set(target, prop, value, receiver)
|
||||
changes$.next(target)
|
||||
return returnVal
|
||||
},
|
||||
deleteProperty: (target, prop) => {
|
||||
const returnVal = Reflect.deleteProperty(target, prop)
|
||||
if (propertySubscriptions.has(prop)) {
|
||||
stopObservingChildObject(prop)
|
||||
}
|
||||
changes$.next(proxy)
|
||||
return returnVal
|
||||
}
|
||||
})
|
||||
|
||||
/// Initialization
|
||||
for (let key of Object.keys(obj)) {
|
||||
proxy[key] = obj[key]
|
||||
}
|
||||
|
||||
return [proxy, changes$]
|
||||
}
|
||||
@ -1,22 +0,0 @@
|
||||
import {v4 as uuidv4} from 'uuid'
|
||||
|
||||
export class Account {
|
||||
uid: Number
|
||||
appendix: String
|
||||
title: String
|
||||
uuid: String
|
||||
|
||||
constructor() {
|
||||
this.uid = 0
|
||||
this.uuid = ""
|
||||
this.appendix = ""
|
||||
this.title = ""
|
||||
}
|
||||
|
||||
parseFromJson(item: any) {
|
||||
this.uid = item.account.uid
|
||||
this.uuid = item.account.uuid
|
||||
this.title = item.account.title
|
||||
this.appendix = item.account.appendix
|
||||
}
|
||||
}
|
||||
@ -1,73 +0,0 @@
|
||||
import {v4 as uuidv4} from 'uuid'
|
||||
import {Contact} from "./contact"
|
||||
import {Shop} from "./shop"
|
||||
|
||||
export class Address {
|
||||
uid: Number
|
||||
uuid: String
|
||||
firstname: String
|
||||
lastname: String
|
||||
street: String
|
||||
houseNumber: String
|
||||
zip: String
|
||||
company: String
|
||||
company2: String
|
||||
phone: String
|
||||
country: String
|
||||
ustid: String
|
||||
city: String
|
||||
email: String
|
||||
contact: Contact
|
||||
type: Number
|
||||
|
||||
constructor() {
|
||||
this.uid = 0
|
||||
this.uuid = ""
|
||||
this.firstname = ""
|
||||
this.lastname = ""
|
||||
this.street = ""
|
||||
this.houseNumber = ""
|
||||
this.zip = ""
|
||||
this.company = ""
|
||||
this.company2 = ""
|
||||
this.city = ""
|
||||
this.email = ""
|
||||
this.country = ""
|
||||
this.ustid = ""
|
||||
this.contact = new Contact()
|
||||
this.type = 0
|
||||
}
|
||||
|
||||
parseFromJson(item: any) {
|
||||
this.uid = item.uid
|
||||
this.uuid = item.uuid
|
||||
this.firstname = item.firstname
|
||||
this.lastname = item.lastname
|
||||
this.street = item.street
|
||||
this.houseNumber = item.houseNumber
|
||||
this.zip = item.zip
|
||||
this.company = item.company
|
||||
this.company2 = item.company2
|
||||
this.phone = item.phone
|
||||
this.city = item.city
|
||||
this.email = item.email
|
||||
this.type = item.type
|
||||
this.country = item.country
|
||||
this.ustid = item.ustid
|
||||
}
|
||||
|
||||
parseFromFormData(formdata: any) {
|
||||
|
||||
this.email = formdata.email
|
||||
this.company = formdata.company
|
||||
this.firstname = formdata.firstname
|
||||
this.lastname = formdata.lastname
|
||||
this.street = formdata.street
|
||||
this.houseNumber = formdata.houseNumber
|
||||
this.zip = formdata.zip
|
||||
this.city = formdata.city
|
||||
this.phone = formdata.phone
|
||||
this.country = formdata.country
|
||||
this.ustid = formdata.ustid
|
||||
}
|
||||
}
|
||||
@ -1,82 +0,0 @@
|
||||
import {Shop} from "./shop"
|
||||
|
||||
export class LayouterData {
|
||||
firstname: string
|
||||
company: string
|
||||
lastname: string
|
||||
street: string
|
||||
houseNumber: string
|
||||
zip: string
|
||||
city: string
|
||||
phone: string
|
||||
country: string
|
||||
ustid: string
|
||||
|
||||
constructor() {
|
||||
this.firstname = ""
|
||||
this.company = ""
|
||||
this.lastname = ""
|
||||
this.street = ""
|
||||
this.houseNumber = ""
|
||||
this.zip = ""
|
||||
this.city = ""
|
||||
this.phone = ""
|
||||
this.country = ""
|
||||
this.ustid = ""
|
||||
}
|
||||
}
|
||||
export class Contact {
|
||||
uid: number
|
||||
username: string
|
||||
email: string
|
||||
password: string
|
||||
uuid: string
|
||||
shops: Shop[]
|
||||
layouter_data: LayouterData
|
||||
|
||||
|
||||
constructor() {
|
||||
this.uid = 0
|
||||
this.uuid = ""
|
||||
this.username = ""
|
||||
this.email = ""
|
||||
this.password = ""
|
||||
this.shops = []
|
||||
this.layouter_data = new LayouterData()
|
||||
}
|
||||
|
||||
parseFromJson(item: any) {
|
||||
this.uid = item.contact.uid
|
||||
this.uuid = item.contact.uuid
|
||||
this.email = item.contact.email
|
||||
this.username = item.contact.username
|
||||
this.layouter_data.firstname = item.contact.layouter_data.firstname
|
||||
this.layouter_data.company = item.contact.layouter_data.company
|
||||
this.layouter_data.lastname = item.contact.layouter_data.lastname
|
||||
this.layouter_data.street = item.contact.layouter_data.street
|
||||
this.layouter_data.houseNumber = item.contact.layouter_data.houseNumber
|
||||
this.layouter_data.zip = item.contact.layouter_data.zip
|
||||
this.layouter_data.city = item.contact.layouter_data.city
|
||||
this.layouter_data.phone = item.contact.layouter_data.phone
|
||||
this.layouter_data.country = item.contact.layouter_data.country
|
||||
this.layouter_data.ustid = item.contact.layouter_data.ustid
|
||||
}
|
||||
|
||||
parseFromFormData(formdata: any, shop: Shop = null) {
|
||||
|
||||
this.email = formdata.email
|
||||
this.layouter_data.company = formdata.company
|
||||
this.layouter_data.firstname = formdata.firstname
|
||||
this.layouter_data.lastname = formdata.lastname
|
||||
this.layouter_data.street = formdata.street
|
||||
this.layouter_data.houseNumber = formdata.houseNumber
|
||||
this.layouter_data.zip = formdata.zip
|
||||
this.layouter_data.city = formdata.city
|
||||
this.layouter_data.phone = formdata.phone
|
||||
this.layouter_data.country = formdata.country
|
||||
this.layouter_data.ustid = formdata.ustid
|
||||
if(shop) {
|
||||
this.shops.push(shop)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,15 +0,0 @@
|
||||
export class Country {
|
||||
uuid: String = ""
|
||||
title: String = ""
|
||||
code: String = ""
|
||||
useVatWithUstId: boolean = true
|
||||
useVatWithoutUstId: boolean = true
|
||||
|
||||
parseFromJson(item: any) {
|
||||
this.uuid = item.uuid
|
||||
this.title = item.title
|
||||
this.code = item.code
|
||||
this.useVatWithUstId = item.useVatWithUstId
|
||||
this.useVatWithoutUstId = item.useVatWithoutUstId
|
||||
}
|
||||
}
|
||||
@ -1,73 +0,0 @@
|
||||
import {v4 as uuidv4} from 'uuid'
|
||||
import {Contact} from "./contact"
|
||||
import {Account} from "./account"
|
||||
import {Address} from "./address"
|
||||
import {Pos} from "./pos"
|
||||
import {Payment} from "./payment"
|
||||
import {Shipping} from "./shipping"
|
||||
import {Shop} from "./shop"
|
||||
|
||||
export class Order {
|
||||
|
||||
alias: String
|
||||
uuid: String
|
||||
draft: Boolean
|
||||
saved: boolean
|
||||
|
||||
contact: Contact = new Contact()
|
||||
account: Account = new Account()
|
||||
deliveryAddress: Address = new Address()
|
||||
senderAddress: Address = new Address()
|
||||
invoiceAddress: Address = new Address()
|
||||
|
||||
positions: Array<Pos> = []
|
||||
|
||||
payment: Payment = new Payment()
|
||||
shipping: Shipping = new Shipping()
|
||||
|
||||
basketField1: String
|
||||
basketField2: String
|
||||
|
||||
type: Number
|
||||
shop: Shop = new Shop()
|
||||
|
||||
net: number
|
||||
vat: number
|
||||
gross: number
|
||||
|
||||
constructor() {
|
||||
this.uuid = uuidv4()
|
||||
this.basketField1 = ""
|
||||
this.basketField2 = ""
|
||||
this.draft = true
|
||||
this.saved = false
|
||||
}
|
||||
|
||||
addPosition(pos: Pos) {
|
||||
this.positions.push(pos)
|
||||
}
|
||||
|
||||
parseFromJson(item: any) {
|
||||
this.shop.parseFromJson(item)
|
||||
this.contact.parseFromJson(item)
|
||||
this.account.parseFromJson(item)
|
||||
this.shipping.parseFromJson(item)
|
||||
this.payment.parseFromJson(item)
|
||||
this.invoiceAddress.parseFromJson(item.invoiceAddress)
|
||||
this.deliveryAddress.parseFromJson(item.deliveryAddress)
|
||||
this.senderAddress.parseFromJson(item.senderAddress)
|
||||
this.alias = item.alias
|
||||
this.uuid = item.uuid
|
||||
this.type = item.type
|
||||
this.draft = item.draft
|
||||
this.saved = true
|
||||
this.basketField1 = item.basketField1
|
||||
this.basketField2 = item.basketField2
|
||||
|
||||
item.positions.map((e) => {
|
||||
let pos = new Pos()
|
||||
pos.parseFromJson(e)
|
||||
this.positions.push(pos)
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
export class Payment {
|
||||
uid: Number = 0
|
||||
title: String = ""
|
||||
uuid: String = ""
|
||||
|
||||
parseFromJson(item: any) {
|
||||
this.uid = item.payment.uid
|
||||
this.title = item.payment.title
|
||||
this.uuid = String(item.payment.uuid)
|
||||
}
|
||||
}
|
||||
@ -1,23 +0,0 @@
|
||||
import {v4 as uuidv4} from 'uuid'
|
||||
import {Product} from "./product"
|
||||
import {Price} from "./price"
|
||||
|
||||
export class Pos {
|
||||
uuid: String = ""
|
||||
product: Product = new Product()
|
||||
status: Number = 10
|
||||
count: Number = 1
|
||||
price: Price = new Price()
|
||||
|
||||
constructor() {
|
||||
this.uuid = uuidv4()
|
||||
}
|
||||
|
||||
parseFromJson(item: any) {
|
||||
this.count = item.price.count
|
||||
this.status = item.status
|
||||
this.uuid = item.uuid
|
||||
this.price.parseFromJson(item.price)
|
||||
this.product.parseFromJson(item.product)
|
||||
}
|
||||
}
|
||||
@ -1,18 +0,0 @@
|
||||
export class Price {
|
||||
net: number = 0
|
||||
vat: number = 0
|
||||
gross: number = 0
|
||||
|
||||
allNet: number = 0
|
||||
allVat: number = 0
|
||||
allGross: number = 0
|
||||
|
||||
parseFromJson(item: any) {
|
||||
this.net = item.net
|
||||
this.vat = item.vat
|
||||
this.gross = item.gross
|
||||
this.allNet = item.allNet
|
||||
this.allVat = item.allVat
|
||||
this.allGross = item.allGross
|
||||
}
|
||||
}
|
||||
@ -1,27 +0,0 @@
|
||||
interface Param {
|
||||
[key: string]: string | boolean | number
|
||||
}
|
||||
|
||||
export class SpecialProductTypeObject {
|
||||
params: Array<Param> = []
|
||||
typ: Number = 0
|
||||
|
||||
parseFromJson(item: any) {
|
||||
this.typ = item.typ
|
||||
this.params = item.params
|
||||
}
|
||||
}
|
||||
|
||||
export class Product {
|
||||
id: Number = 0
|
||||
title: String = ""
|
||||
uuid: String = ""
|
||||
specialProductTypeObject: SpecialProductTypeObject = new SpecialProductTypeObject()
|
||||
|
||||
parseFromJson(item: any) {
|
||||
this.id = item.id
|
||||
this.title = item.title
|
||||
this.uuid = item.uuid
|
||||
this.specialProductTypeObject.parseFromJson(item.specialProductTypeObject)
|
||||
}
|
||||
}
|
||||
@ -1,6 +0,0 @@
|
||||
export class ProductGroup {
|
||||
id: Number = 0
|
||||
label: String = ""
|
||||
uuid: String = ""
|
||||
//options: ProductGroup[] = []
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
|
||||
export class Shipping {
|
||||
uid: Number = 0
|
||||
title: String = ""
|
||||
uuid: String = ""
|
||||
|
||||
parseFromJson(item: any) {
|
||||
this.uid = item.shipping.uid
|
||||
this.title = item.shipping.title
|
||||
this.uuid = String(item.shipping.uuid)
|
||||
}
|
||||
}
|
||||
@ -1,20 +0,0 @@
|
||||
|
||||
export class Shop {
|
||||
id: number = 0
|
||||
name: string = ""
|
||||
uuid: string = ""
|
||||
basketField1: string = ""
|
||||
basketField2: string = ""
|
||||
basketPosField1: string = ""
|
||||
basketPosField2: string = ""
|
||||
|
||||
parseFromJson(item: any) {
|
||||
this.id = item.shop.id
|
||||
this.name = item.shop.name
|
||||
this.uuid = item.shop.uuid
|
||||
this.basketField1 = item.shop.basketField1
|
||||
this.basketField2 = item.shop.basketField2
|
||||
this.basketPosField1 = item.shop.basketPosField1
|
||||
this.basketPosField2 = item.shop.basketPosField2
|
||||
}
|
||||
}
|
||||
@ -1,70 +0,0 @@
|
||||
import { AsyncPaginate } from "react-select-async-paginate"
|
||||
import { AccountService } from '../../services/account'
|
||||
import { container } from 'tsyringe'
|
||||
import { OrderState } from '../../state/order'
|
||||
import {useEffect, useState} from 'react'
|
||||
import * as PropTypes from 'prop-types'
|
||||
import { Shop } from '../../model/shop'
|
||||
import {Order} from "../../model/order"
|
||||
import { SelectLabel } from "../base/SelectLabel"
|
||||
import React from 'react'
|
||||
const AccountSelectComponent = ({shop, order}) => {
|
||||
|
||||
const [shopUuid, setShopUuid] = useState(null)
|
||||
|
||||
const [account, setAccount] = useState(0)
|
||||
useEffect(() => {
|
||||
setShopUuid(shop.uuid)
|
||||
}, [shop.uuid])
|
||||
|
||||
const orderState: OrderState = container.resolve(OrderState)
|
||||
|
||||
const loadOptions = async (searchQuery, loadedOptions) => {
|
||||
|
||||
const account_service = new AccountService()
|
||||
|
||||
const data = await account_service.getAccounts(shop)
|
||||
|
||||
return {
|
||||
options: data,
|
||||
hasMore: false,
|
||||
}
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
setAccount(order.account.uuid)
|
||||
}, [order.account])
|
||||
|
||||
const onChange = (option) => {
|
||||
order.account = option
|
||||
let orderObj = orderState.getCurrentOrder().getValue()
|
||||
orderObj.account = option
|
||||
orderState.setCurrentOrder(orderObj)
|
||||
setAccount(option.uid)
|
||||
}
|
||||
|
||||
return (
|
||||
|
||||
<AsyncPaginate
|
||||
defaultOptions
|
||||
className={`${account == 0 ? "border border-danger" : ""}`}
|
||||
key={JSON.stringify(shopUuid)}
|
||||
defaultValue={order.account}
|
||||
components={{Control: SelectLabel}}
|
||||
name={'Firma'}
|
||||
loadOptions={loadOptions}
|
||||
placeholder=''
|
||||
getOptionValue={(option) => option.uuid}
|
||||
getOptionLabel={(option) => option.title}
|
||||
onChange={onChange}
|
||||
isSearchable={true}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
AccountSelectComponent.propTypes = {
|
||||
shop: PropTypes.instanceOf(Shop),
|
||||
order: PropTypes.instanceOf(Order),
|
||||
}
|
||||
|
||||
export default AccountSelectComponent
|
||||
@ -1,67 +0,0 @@
|
||||
import { Shop } from '../../model/shop'
|
||||
import ContactComponent from '../contact/ContactComponent'
|
||||
import TopBarComponent from '../topbar/TopBarComponent'
|
||||
import PositionsComponent from '../positions/PositionsComponent'
|
||||
import {useEffect, useState} from 'react'
|
||||
import {Order} from "../../model/order"
|
||||
import PaymentComponent from "../payment/PaymentComponent"
|
||||
import ShippingComponent from "../shipping/ShippingComponent"
|
||||
import ButtonComponent from "../button/ButtonComponent"
|
||||
import {useParams} from "react-router-dom"
|
||||
import {container} from "tsyringe"
|
||||
import {OrderState} from "../../state/order"
|
||||
import {OrderService} from "../../services/order"
|
||||
import InfoFieldComponent from "../info/InfoFieldComponent"
|
||||
import React from 'react'
|
||||
import OrderAliasComponent from '../order/OrderAliasComponent'
|
||||
|
||||
const BaseComponent = (props) => {
|
||||
|
||||
const [shop, setShop] = useState<Shop>(new Shop())
|
||||
const [order, setOrder] = useState<Order>(new Order())
|
||||
|
||||
const order_state = container.resolve(OrderState)
|
||||
const orderService = container.resolve(OrderService)
|
||||
const loadOrder = async (uuid: String) => {
|
||||
orderService.getOrder(uuid).then((orderObj) => {
|
||||
order_state.setCurrentOrder(orderObj)
|
||||
setShop(orderObj.shop)
|
||||
setOrder(orderObj)
|
||||
})
|
||||
}
|
||||
|
||||
let params = useParams()
|
||||
|
||||
useEffect(() => {
|
||||
if(params.uuid) {
|
||||
loadOrder(params.uuid)
|
||||
}
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<React.StrictMode>
|
||||
<div className='ml-1 mt-1 mr-1'>
|
||||
<div className="flex gap-1 mt-1 mb-1">
|
||||
<div className="flex-1">
|
||||
<OrderAliasComponent order={order} />
|
||||
</div>
|
||||
<div className="">
|
||||
<ButtonComponent loadOrder={loadOrder}/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<TopBarComponent shop={shop} order={order} change={setShop} />
|
||||
<div className="mt-1 mb-1">{ shop.id != 0 && <ContactComponent shop={shop} order={order} /> }</div>
|
||||
<div>{ shop.id != 0 && <PositionsComponent shop={shop} order={order} /> }</div>
|
||||
<div className="mt-1 mb-1 flex gap-1">
|
||||
<div className="flex-1">{ shop.id != 0 && <PaymentComponent shop={shop} order={order} /> }</div>
|
||||
<div className="flex-1">{ shop.id != 0 && <ShippingComponent shop={shop} order={order} /> }</div>
|
||||
</div>
|
||||
{ shop.id != 0 && <InfoFieldComponent shop={shop} order={order} /> }
|
||||
</div>
|
||||
</React.StrictMode>
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
export default BaseComponent
|
||||
@ -1,21 +0,0 @@
|
||||
import { BsPlus } from "@react-icons/all-files/bs/BsPlus"
|
||||
import { BsPencil } from "@react-icons/all-files/bs/BsPencil"
|
||||
import { RiSaveFill } from "@react-icons/all-files/ri/RiSaveFill"
|
||||
import { RiDeleteBin2Line } from "@react-icons/all-files/ri/RiDeleteBin2Line"
|
||||
import { BsXCircle } from "@react-icons/all-files/bs/BsXCircle"
|
||||
import { Button as BaseButton } from "flowbite-react"
|
||||
import React from 'react'
|
||||
|
||||
const Button = ({ type , variant , onClick }) => {
|
||||
return (
|
||||
<BaseButton color={variant} pill onClick={onClick}>
|
||||
{ type == 1 && <BsPlus/> }
|
||||
{ type == 2 && <BsPencil/> }
|
||||
{ type == 3 && <RiSaveFill/> }
|
||||
{ type == 4 && <BsXCircle/> }
|
||||
{ type == 5 && <RiDeleteBin2Line/> }
|
||||
</BaseButton>
|
||||
);
|
||||
};
|
||||
|
||||
export default Button;
|
||||
@ -1,18 +0,0 @@
|
||||
import React from 'react'
|
||||
|
||||
interface IProps {
|
||||
price: number;
|
||||
}
|
||||
|
||||
const Currency: React.FC<IProps> = ({ price }) => {
|
||||
return (
|
||||
<>
|
||||
{Intl.NumberFormat('de-DE', {
|
||||
style: 'currency',
|
||||
currency: 'EUR'
|
||||
}).format(price/100)}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default Currency;
|
||||
@ -1,24 +0,0 @@
|
||||
import styled from "styled-components"
|
||||
import { components } from "react-select"
|
||||
import React from 'react'
|
||||
|
||||
export const SelectLabel = (props: any) => {
|
||||
|
||||
return (
|
||||
<>
|
||||
<components.Control {...props} />
|
||||
<Label $isFloating={props.getValue().length == 0 || props.getValue()[0].uuid == ""}>{props.selectProps.name}</Label>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
const Label = styled.label<{ $isFloating?: boolean }>`
|
||||
left: 10px;
|
||||
pointer-events: none;
|
||||
position: absolute;
|
||||
transition: 0.2s ease all;
|
||||
-moz-transition: 0.2s ease all;
|
||||
-webkit-transition: 0.2s ease all;
|
||||
top: ${(props) => (props.$isFloating ? `20%` : `0px`)};
|
||||
font-size: ${(props) => (props.$isFloating ? `1rem` : `0.6rem`)};
|
||||
`;
|
||||
@ -1,67 +0,0 @@
|
||||
import { OrderState } from '../../state/order'
|
||||
import {container} from "tsyringe"
|
||||
import { OrderService } from '../../services/order'
|
||||
import { Component } from 'react'
|
||||
import {debounceTime} from "rxjs"
|
||||
import {Order} from "../../model/order"
|
||||
import { RiSaveFill } from "@react-icons/all-files/ri/RiSaveFill"
|
||||
import { RiPrinterFill } from "@react-icons/all-files/ri/RiPrinterFill"
|
||||
import { Button } from "flowbite-react"
|
||||
import React from 'react'
|
||||
|
||||
class ButtonComponent extends Component<{loadOrder},{disabled: boolean}> {
|
||||
orderState: OrderState
|
||||
orderService: OrderService
|
||||
constructor(props) {
|
||||
super(props)
|
||||
this.orderState = container.resolve(OrderState)
|
||||
this.orderService = container.resolve(OrderService)
|
||||
|
||||
this.state = {disabled: true}
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.orderState.getCurrentOrder().pipe(debounceTime(2000)).subscribe((e) => this.saveButton(e))
|
||||
}
|
||||
|
||||
saveButton(order: Order) {
|
||||
if(order.contact.username != ""
|
||||
&& order.payment.title != ""
|
||||
&& order.shipping.title != ""
|
||||
&& order.shop.name != ""
|
||||
&& order.account.title != ""
|
||||
&& order.invoiceAddress.uuid != ""
|
||||
&& order.type != 0
|
||||
) {
|
||||
this.setState({disabled: false})
|
||||
}
|
||||
}
|
||||
|
||||
async handlePrint(e) {
|
||||
const uuid = this.orderState.getCurrentOrder().value.uuid;
|
||||
const type = this.orderState.getCurrentOrder().value.type;
|
||||
window.open('/apps/backend/order/detail/print/' + type + '/' + uuid)
|
||||
}
|
||||
|
||||
async handleSave(e) {
|
||||
e.preventDefault()
|
||||
|
||||
let result = await this.orderService.saveOrder(this.orderState.getCurrentOrder().value)
|
||||
|
||||
this.props.loadOrder(result['uuid'])
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div className="flex gap-3">
|
||||
<Button size="xs" color="info" disabled={this.state.disabled} onClick={(e:any) => this.handleSave(e)}>
|
||||
<RiSaveFill className="mr-2 h-5 w-5"/> Speichern
|
||||
</Button>
|
||||
<Button size="xs" color="success" disabled={!this.orderState.getCurrentOrder().value.saved} onClick={(e:any) => this.handlePrint(e)}>
|
||||
<RiPrinterFill className="mr-2 h-5 w-5"/> Drucken
|
||||
</Button>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
export default ButtonComponent
|
||||
@ -1,48 +0,0 @@
|
||||
import React from 'react'
|
||||
import * as PropTypes from "prop-types"
|
||||
import {Order} from "../../model/order"
|
||||
import {container} from "tsyringe"
|
||||
import {OrderState} from "../../state/order"
|
||||
import { debounceTime } from 'rxjs'
|
||||
import {OrderService} from "../../services/order"
|
||||
import Currency from "../base/Currency"
|
||||
|
||||
type MyState = {
|
||||
order: Order // like this
|
||||
}
|
||||
|
||||
class CalcComponent extends React.Component<{ },MyState> {
|
||||
orderState: OrderState
|
||||
orderService: OrderService
|
||||
|
||||
state: MyState = {
|
||||
order: new Order()
|
||||
}
|
||||
|
||||
constructor(props) {
|
||||
super(props)
|
||||
this.orderState = container.resolve(OrderState)
|
||||
this.orderService = container.resolve(OrderService)
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.orderState.getCurrentOrder().pipe(debounceTime(2000)).subscribe((e) => this.calc(e))
|
||||
}
|
||||
|
||||
async calc(e: Order) {
|
||||
let result = await this.orderService.calcOrder(e)
|
||||
this.setState(() => ({
|
||||
order: result,
|
||||
}))
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<h3>
|
||||
<small className="text-body-secondary"> Netto: <Currency price={this.state.order.net} /> + MwSt.: <Currency price={this.state.order.vat} /> =</small> Brutto: <Currency price={this.state.order.gross} />
|
||||
</h3>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default CalcComponent
|
||||
@ -1,16 +0,0 @@
|
||||
import * as PropTypes from 'prop-types'
|
||||
import { Address } from '../../model/address'
|
||||
import React from 'react'
|
||||
const AddressDetail = ({address}) => {
|
||||
|
||||
return (
|
||||
<small>{address.company} {address.firstname} {address.lastname} {address.street} {address.houseNumber} {address.country} {address.zip} {address.city}</small>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
AddressDetail.propTypes = {
|
||||
address: PropTypes.instanceOf(Address)
|
||||
}
|
||||
|
||||
export default AddressDetail
|
||||
@ -1,129 +0,0 @@
|
||||
import { useEffect, useState } from 'react'
|
||||
import NiceModal, { useModal, bootstrapDialog } from "@ebay/nice-modal-react"
|
||||
import Button from '../base/Button'
|
||||
import {RJSFSchema} from "@rjsf/utils"
|
||||
import validator from "@rjsf/validator-ajv6"
|
||||
import Form from "@rjsf/core"
|
||||
import { CountryService } from '../../services/country'
|
||||
import { Modal } from "flowbite-react"
|
||||
import React from 'react'
|
||||
|
||||
const Addressdiv = NiceModal.create(
|
||||
({ title, action, address, shop }) => {
|
||||
|
||||
const country_api = new CountryService()
|
||||
|
||||
const modal = useModal()
|
||||
const [formData, setFormData] = useState({})
|
||||
|
||||
const [schema, setSchema] = useState<RJSFSchema>({})
|
||||
|
||||
useEffect(() => {
|
||||
if(address) {
|
||||
setFormData({
|
||||
email: address.email,
|
||||
firstname: address.firstname,
|
||||
lastname: address.lastname,
|
||||
company: address.company,
|
||||
street: address.street,
|
||||
houseNumber: address.houseNumber,
|
||||
zip: address.zip,
|
||||
city: address.city,
|
||||
phone: address.phone,
|
||||
country: address.country,
|
||||
ustid: address.ustid
|
||||
})
|
||||
}
|
||||
}, [address])
|
||||
|
||||
useEffect(() => {
|
||||
country_api.getCountry(shop).then(( data ) => {
|
||||
var countrys: array = [];
|
||||
|
||||
data.forEach((item) => {
|
||||
countrys.push({'title': item.code, 'const': item.code})
|
||||
})
|
||||
|
||||
var schema: RJSFSchema = {
|
||||
title: 'Address',
|
||||
type: 'object',
|
||||
required: ['email'],
|
||||
properties: {
|
||||
email: { type: 'string', format: 'email', title: 'E-Mail' },
|
||||
company: { type: 'string', title: 'Company'},
|
||||
firstname: { type: 'string', title: 'Firstname'},
|
||||
lastname: { type: 'string', title: 'Lastname'},
|
||||
street: { type: 'string', title: 'Street'},
|
||||
houseNumber: { type: 'string', title: 'Housenumber'},
|
||||
zip: { type: 'string', title: 'Zip'},
|
||||
city: { type: 'string', title: 'City'},
|
||||
phone: { type: 'string', title: 'Phone'},
|
||||
ustid: { type: 'string', title: 'UstId'},
|
||||
country: { type: 'string', title: 'Country', oneOf: countrys}
|
||||
}
|
||||
};
|
||||
|
||||
setSchema(schema)
|
||||
|
||||
});
|
||||
}, []);
|
||||
|
||||
const uiSchema: RJSFSchema = {
|
||||
"ui:submitButtonOptions": {
|
||||
"submitText": "Save",
|
||||
"norender": true,
|
||||
"props": {
|
||||
"disabled": false,
|
||||
"className": "btn btn-info"
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
return (
|
||||
<Modal show={modal.visible} onClose={() => modal.remove()}>
|
||||
<Modal.Header>
|
||||
<div>{title}</div>
|
||||
</Modal.Header>
|
||||
<Modal.Body>
|
||||
{action === "Save" && (
|
||||
<Form
|
||||
schema={schema}
|
||||
formData={formData}
|
||||
uiSchema={uiSchema}
|
||||
validator={validator}
|
||||
onChange={(e) => setFormData(e.formData)}
|
||||
|
||||
/>
|
||||
)}
|
||||
</Modal.Body>
|
||||
<Modal.Footer>
|
||||
<Button
|
||||
type={3}
|
||||
variant="success"
|
||||
onClick={() => {
|
||||
if (action === "Save") {
|
||||
if (formData) {
|
||||
modal.resolve(formData)
|
||||
modal.remove()
|
||||
}
|
||||
} else {
|
||||
modal.resolve()
|
||||
modal.remove()
|
||||
}
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
type={4}
|
||||
variant="warning"
|
||||
onClick={() => {
|
||||
modal.remove()
|
||||
}}
|
||||
/>
|
||||
</Modal.Footer>
|
||||
</Modal>
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
export default Addressdiv
|
||||
@ -1,53 +0,0 @@
|
||||
import * as PropTypes from "prop-types"
|
||||
import Button from "../base/Button"
|
||||
import AddressModal from "./AddressModal"
|
||||
import { useCallback } from 'react'
|
||||
import { useModal } from '@ebay/nice-modal-react'
|
||||
import { Address } from "../../model/address"
|
||||
import { Shop } from "../../model/shop"
|
||||
import React from 'react'
|
||||
|
||||
const AddressModalComponent = ({handleAdd, handleEdit, address, shop}) => {
|
||||
const addressModal = useModal(AddressModal)
|
||||
|
||||
const showAddModal = useCallback(() => {
|
||||
addressModal.show({title: 'Add Address', action: 'Save', shop}).then((formData) => {
|
||||
addAddress(formData)
|
||||
})
|
||||
},[addressModal])
|
||||
|
||||
const showEditModal = useCallback((address) => {
|
||||
addressModal.show({ title: 'Edit Address', action: 'Save', address: address, shop }).then((formData) => {
|
||||
updateAddress(formData)
|
||||
})
|
||||
},[addressModal])
|
||||
|
||||
const updateAddress = (formData) => {
|
||||
address.parseFromFormData(formData)
|
||||
handleEdit(address)
|
||||
}
|
||||
|
||||
const addAddress = (formData) => {
|
||||
address = new Address()
|
||||
address.parseFromFormData(formData)
|
||||
handleAdd(address)
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={'flex gap-1'}>
|
||||
<Button type={1} variant="success" onClick={showAddModal} />
|
||||
<Button type={2} variant="info" onClick={() => {
|
||||
showEditModal(address)
|
||||
}} />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
AddressModalComponent.propTypes = {
|
||||
handleAdd: PropTypes.func,
|
||||
handleEdit: PropTypes.func,
|
||||
address: PropTypes.instanceOf(Address),
|
||||
shop: PropTypes.instanceOf(Shop)
|
||||
}
|
||||
|
||||
export default AddressModalComponent
|
||||
@ -1,108 +0,0 @@
|
||||
import * as PropTypes from 'prop-types'
|
||||
import { AsyncPaginate } from "react-select-async-paginate"
|
||||
import { Contact } from '../../model/contact'
|
||||
import { Address } from '../../model/address'
|
||||
import {container} from "tsyringe"
|
||||
import {useEffect,useState} from 'react'
|
||||
import {OrderState} from "../../state/order"
|
||||
import {AddressService} from "../../services/address"
|
||||
import AddressModalComponent from "./AddressModalComponent"
|
||||
import { SelectLabel } from '../base/SelectLabel'
|
||||
import AddressDetail from './AddressDetail'
|
||||
import { Shop } from '../../model/shop'
|
||||
import React from 'react'
|
||||
|
||||
const AddressSelect = ({address, contact, type, changeAddress, name, shop}) => {
|
||||
|
||||
const [contactUuid, setContactUuid] = useState(null)
|
||||
|
||||
const [localAddress, setLocalAddress] = useState(null)
|
||||
|
||||
const address_service = new AddressService()
|
||||
|
||||
let orderState = container.resolve(OrderState)
|
||||
|
||||
useEffect(() => {
|
||||
if(contact.uuid != "") {
|
||||
setContactUuid(contact.uuid)
|
||||
}
|
||||
}, [contact.uuid])
|
||||
|
||||
useEffect(() => {
|
||||
setLocalAddress(address)
|
||||
}, [address])
|
||||
|
||||
const order: OrderState = container.resolve(OrderState)
|
||||
|
||||
const loadOptions = async (searchQuery, loadedOptions) => {
|
||||
|
||||
const data = await address_service.getContactAddress(contact.uuid, type)
|
||||
|
||||
return {
|
||||
options: data,
|
||||
hasMore: false,
|
||||
}
|
||||
}
|
||||
|
||||
const handleAdd = (address: Address) => {
|
||||
address.type = type
|
||||
address.contact.uuid = contact.uuid
|
||||
address_service.create(address).then(() => {
|
||||
setLocalAddress(address)
|
||||
changeAddress(address, type)
|
||||
setContactUuid(Math.random())
|
||||
})
|
||||
}
|
||||
|
||||
const handleEdit = (address: Address) => {
|
||||
address.type = type
|
||||
address.contact.uuid = contact.uuid
|
||||
address_service.update(address).then(() => {
|
||||
setLocalAddress(address)
|
||||
changeAddress(address, type)
|
||||
setContactUuid(Math.random())
|
||||
})
|
||||
}
|
||||
|
||||
const setAddressInOrder = (option) => {
|
||||
setLocalAddress(option)
|
||||
changeAddress(option, type)
|
||||
}
|
||||
|
||||
return (
|
||||
<div className='flex gap-1'>
|
||||
<div className='flex-1'>
|
||||
<AsyncPaginate
|
||||
defaultOptions
|
||||
defaultValue={address}
|
||||
key={JSON.stringify(contactUuid)}
|
||||
loadOptions={loadOptions}
|
||||
getOptionValue={(option) => option.uuid}
|
||||
getOptionLabel={(option) => option.firstname + ' ' + option.lastname}
|
||||
onChange={setAddressInOrder}
|
||||
isSearchable={false}
|
||||
name={name}
|
||||
placeholder=''
|
||||
components={{ Control: SelectLabel }}
|
||||
/>
|
||||
|
||||
{ localAddress && <AddressDetail address={localAddress} />}
|
||||
</div>
|
||||
<div >
|
||||
<AddressModalComponent address={localAddress} handleAdd={handleAdd} handleEdit={handleEdit} shop={shop}/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
)
|
||||
}
|
||||
|
||||
AddressSelect.propTypes = {
|
||||
address: PropTypes.instanceOf(Address),
|
||||
contact: PropTypes.instanceOf(Contact),
|
||||
shop: PropTypes.instanceOf(Shop),
|
||||
type: PropTypes.number,
|
||||
changeAddress: PropTypes.func,
|
||||
name: PropTypes.string
|
||||
}
|
||||
|
||||
export default AddressSelect
|
||||
@ -1,94 +0,0 @@
|
||||
import * as React from 'react'
|
||||
import * as PropTypes from 'prop-types'
|
||||
import ContactSelect from './ContactSelect'
|
||||
import AddressSelect from './AddressSelect'
|
||||
import {Contact} from '../../model/contact'
|
||||
import {Address} from '../../model/address'
|
||||
import {useEffect, useState} from 'react'
|
||||
import { OrderState } from '../../state/order'
|
||||
import {container} from "tsyringe"
|
||||
import AccountSelectComponent from '../account/AccountSelectComponent'
|
||||
import { Order } from '../../model/order'
|
||||
import { Shop } from '../../model/shop'
|
||||
import React from 'react'
|
||||
|
||||
const ContactComponent = ({order, shop}) => {
|
||||
|
||||
let orderState = container.resolve(OrderState)
|
||||
|
||||
const [contact, setContact] = useState<Contact>(new Contact())
|
||||
|
||||
const changeAddress = (address: Address, type: Number) => {
|
||||
if(type == 1) {
|
||||
orderState.getCurrentOrder().value.invoiceAddress = address
|
||||
order.invoiceAddress = address
|
||||
}
|
||||
if(type == 2) {
|
||||
orderState.getCurrentOrder().value.deliveryAddress = address
|
||||
order.deliveryAddress = address
|
||||
}
|
||||
if(type == 3) {
|
||||
orderState.getCurrentOrder().value.senderAddress = address
|
||||
order.senderAddress = address
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="flex">
|
||||
<div className="flex-1">
|
||||
<ContactSelect
|
||||
order={order}
|
||||
shop={shop}
|
||||
onChange={setContact}
|
||||
/>
|
||||
</div>
|
||||
<div className="flex-1">
|
||||
<AccountSelectComponent
|
||||
shop={shop} order={order}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex gap-1">
|
||||
<div className="flex-1">
|
||||
{ order.contact.uuid != "" && <AddressSelect
|
||||
address={order.invoiceAddress}
|
||||
contact={order.contact}
|
||||
changeAddress={changeAddress}
|
||||
name='Rechnungsadresse'
|
||||
type={1}
|
||||
shop={shop}
|
||||
/> }
|
||||
</div>
|
||||
<div className="flex-1">
|
||||
{ order.contact.uuid != "" && <AddressSelect
|
||||
address={order.deliveryAddress}
|
||||
contact={order.contact}
|
||||
changeAddress={changeAddress}
|
||||
name='Lieferadresse'
|
||||
type={2}
|
||||
shop={shop}
|
||||
/> }
|
||||
</div>
|
||||
<div className="flex-1">
|
||||
{ order.contact.uuid != "" && <AddressSelect
|
||||
address={order.senderAddress}
|
||||
changeAddress={changeAddress}
|
||||
contact={order.contact}
|
||||
name='Absenderadresse'
|
||||
type={3}
|
||||
shop={shop}
|
||||
/> }
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
ContactComponent.propTypes = {
|
||||
order: PropTypes.instanceOf(Order),
|
||||
shop: PropTypes.instanceOf(Shop),
|
||||
}
|
||||
|
||||
|
||||
export default ContactComponent
|
||||
@ -1,130 +0,0 @@
|
||||
import { useEffect, useState } from 'react';
|
||||
import NiceModal, { useModal, bootstrapDialog } from "@ebay/nice-modal-react";
|
||||
import Button from '../base/Button'
|
||||
import {RJSFSchema} from "@rjsf/utils";
|
||||
import {Contact} from "../../model/contact";
|
||||
import validator from "@rjsf/validator-ajv6";
|
||||
import Form from "@rjsf/core";
|
||||
import {CountryService} from "../../services/country";
|
||||
import { Modal } from "flowbite-react";
|
||||
import React from 'react'
|
||||
|
||||
const ContactModal = NiceModal.create(
|
||||
({ title, action, contact, shop }) => {
|
||||
|
||||
const country_api = new CountryService()
|
||||
|
||||
const modal = useModal();
|
||||
const [formData, setFormData] = useState({});
|
||||
|
||||
const [schema, setSchema] = useState<RJSFSchema>({})
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
if(contact.uid != "") {
|
||||
setFormData({
|
||||
email: contact.username,
|
||||
firstname: contact.layouter_data.firstname,
|
||||
lastname: contact.layouter_data.lastname,
|
||||
company: contact.layouter_data.company,
|
||||
street: contact.layouter_data.street,
|
||||
houseNumber: contact.layouter_data.houseNumber,
|
||||
zip: contact.layouter_data.zip,
|
||||
city: contact.layouter_data.city,
|
||||
phone: contact.layouter_data.phone,
|
||||
country: contact.layouter_data.country,
|
||||
ustid: contact.layouter_data.ustid
|
||||
});
|
||||
}
|
||||
}, [contact]);
|
||||
|
||||
const uiSchema: RJSFSchema = {
|
||||
"ui:submitButtonOptions": {
|
||||
"submitText": "Save",
|
||||
"norender": true,
|
||||
"props": {
|
||||
"disabled": false,
|
||||
"className": "btn btn-info"
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
country_api.getCountry(shop).then(( data ) => {
|
||||
var countrys = [];
|
||||
|
||||
data.forEach((item) => {
|
||||
countrys.push({'title': item.code, 'const': item.code})
|
||||
})
|
||||
|
||||
var schema: RJSFSchema = {
|
||||
title: 'Contact',
|
||||
type: 'object',
|
||||
required: ['email'],
|
||||
properties: {
|
||||
email: { type: 'string', format: 'email', title: 'E-Mail' },
|
||||
company: { type: 'string', title: 'Company'},
|
||||
firstname: { type: 'string', title: 'Firstname'},
|
||||
lastname: { type: 'string', title: 'Lastname'},
|
||||
street: { type: 'string', title: 'Street'},
|
||||
houseNumber: { type: 'string', title: 'Housenumber'},
|
||||
zip: { type: 'string', title: 'Zip'},
|
||||
city: { type: 'string', title: 'City'},
|
||||
phone: { type: 'string', title: 'Phone'},
|
||||
ustid: { type: 'string', title: 'UstId'},
|
||||
country: { type: 'string', title: 'Country', oneOf: countrys}
|
||||
}
|
||||
};
|
||||
|
||||
setSchema(schema)
|
||||
|
||||
});
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<Modal show={modal.visible} onClose={() => modal.remove()}>
|
||||
<Modal.Header>
|
||||
{title}
|
||||
</Modal.Header>
|
||||
<Modal.Body>
|
||||
{action === "Save" && (
|
||||
<Form
|
||||
schema={schema}
|
||||
formData={formData}
|
||||
uiSchema={uiSchema}
|
||||
validator={validator}
|
||||
onChange={(e) => setFormData(e.formData)}
|
||||
|
||||
/>
|
||||
)}
|
||||
</Modal.Body>
|
||||
<Modal.Footer>
|
||||
<Button
|
||||
type={3}
|
||||
variant="success"
|
||||
onClick={() => {
|
||||
if (action === "Save") {
|
||||
if (formData) {
|
||||
modal.resolve(formData);
|
||||
modal.remove();
|
||||
}
|
||||
} else {
|
||||
modal.resolve();
|
||||
modal.remove();
|
||||
}
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
type={4}
|
||||
variant="warning"
|
||||
onClick={() => {
|
||||
modal.remove();
|
||||
}}
|
||||
/>
|
||||
</Modal.Footer>
|
||||
</Modal>
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
export default ContactModal;
|
||||
@ -1,75 +0,0 @@
|
||||
import {Contact} from "../../model/contact"
|
||||
import * as PropTypes from "prop-types"
|
||||
import {Shop} from "../../model/shop"
|
||||
import Button from "../base/Button"
|
||||
import ContactModal from "./ContactModal"
|
||||
import { useCallback } from 'react'
|
||||
import { useModal } from '@ebay/nice-modal-react'
|
||||
import { ContactService } from "../../services/contact"
|
||||
import { Address } from "../../model/address"
|
||||
import { AddressService } from "../../services/address"
|
||||
import React from 'react'
|
||||
|
||||
const ContactModalComponent = ({shop, handleAdd, handleEdit, contact}) => {
|
||||
|
||||
|
||||
const contactModal = useModal(ContactModal)
|
||||
|
||||
const showAddModal = useCallback(() => {
|
||||
contactModal.show({title: 'Add Contact', action: 'Save', shop: shop, contact: new Contact()}).then((formData) => {
|
||||
addContact(formData)
|
||||
})
|
||||
},[contactModal])
|
||||
|
||||
const showEditModal = useCallback((contact) => {
|
||||
contact = contact
|
||||
contactModal.show({ title: 'Edit Contact', action: 'Save', contact: contact, shop: shop }).then((formData) => {
|
||||
contact.parseFromFormData(formData)
|
||||
updateContact(contact)
|
||||
})
|
||||
},[contactModal])
|
||||
|
||||
const updateContact = (contact) => {
|
||||
const contact_api = new ContactService()
|
||||
contact_api.updateContact(contact).then((e: any) => {
|
||||
handleEdit(contact)
|
||||
})
|
||||
}
|
||||
|
||||
const addContact = (formData) => {
|
||||
var contact = new Contact()
|
||||
contact.parseFromFormData(formData, shop)
|
||||
const contact_api = new ContactService()
|
||||
contact_api.createContact(contact).then((e: any) => {
|
||||
contact.parseFromJson(e)
|
||||
var address = new Address()
|
||||
address.parseFromFormData(formData)
|
||||
address.contact.uuid = contact.uuid
|
||||
address.type = 1
|
||||
const address_api = new AddressService()
|
||||
address_api.create(address)
|
||||
address.type = 2
|
||||
address_api.create(address)
|
||||
|
||||
handleAdd(contact)
|
||||
})
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={'flex gap-1'}>
|
||||
<Button type={1} variant="success" onClick={showAddModal} />
|
||||
<Button type={2} variant="info" onClick={() => {
|
||||
showEditModal(contact)
|
||||
}} />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
ContactModalComponent.propTypes = {
|
||||
shop: PropTypes.instanceOf(Shop),
|
||||
handleAdd: PropTypes.func,
|
||||
handleEdit: PropTypes.func,
|
||||
contact: PropTypes.instanceOf(Contact)
|
||||
}
|
||||
|
||||
export default ContactModalComponent
|
||||
@ -1,89 +0,0 @@
|
||||
import * as PropTypes from 'prop-types'
|
||||
import { AsyncPaginate } from "react-select-async-paginate"
|
||||
import { Contact } from '../../model/contact'
|
||||
import {ContactService} from '../../services/contact'
|
||||
import { Shop } from '../../model/shop'
|
||||
import {useEffect, useState} from 'react'
|
||||
import { container } from 'tsyringe'
|
||||
import { OrderState } from '../../state/order'
|
||||
import ContactModalComponent from "./ContactModalComponent"
|
||||
import { Order } from '../../model/order'
|
||||
import { SelectLabel } from '../base/SelectLabel'
|
||||
import React from 'react'
|
||||
|
||||
const ContactSelect = ({order, shop, onChange}) => {
|
||||
|
||||
const [shopUuid, setShopUuid] = useState(null);
|
||||
|
||||
const orderState: OrderState = container.resolve(OrderState);
|
||||
const contact_api = new ContactService();
|
||||
|
||||
useEffect(() => {
|
||||
setShopUuid(shop.uuid);
|
||||
}, [shop]);
|
||||
|
||||
const loadOptions = async (searchQuery, loadedOptions, { page }) => {
|
||||
|
||||
let contacts = await contact_api.getContacts(searchQuery, page, shop);
|
||||
|
||||
return {
|
||||
options: contacts,
|
||||
hasMore: false,
|
||||
additional: {
|
||||
page: page + 1,
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
const setContactInOrder = (option) => {
|
||||
orderState.getCurrentOrder().value.contact = option;
|
||||
order.contact = option;
|
||||
onChange(option);
|
||||
};
|
||||
|
||||
const handleAdd = (contact: Contact) => {
|
||||
setShopUuid(Math.random());
|
||||
setContactInOrder(contact);
|
||||
}
|
||||
|
||||
const handleEdit = (contact: Contact) => {
|
||||
setShopUuid(Math.random());
|
||||
setContactInOrder(contact);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="flex gap-1">
|
||||
<div className="flex-1">
|
||||
<AsyncPaginate
|
||||
defaultOptions
|
||||
className={`${orderState.getCurrentOrder().value.contact.username == "" ? "border border-danger" : ""}`}
|
||||
key={JSON.stringify(shopUuid)}
|
||||
defaultValue={order.contact}
|
||||
components={{Control: SelectLabel}}
|
||||
placeholder=''
|
||||
name='Kunde'
|
||||
value={order.contact}
|
||||
loadOptions={loadOptions}
|
||||
getOptionValue={(option) => option.uuid}
|
||||
getOptionLabel={(option) => option.username}
|
||||
onChange={setContactInOrder}
|
||||
isSearchable={true}
|
||||
additional={{
|
||||
page: 1,
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<ContactModalComponent shop={shop} contact={order.contact} handleAdd={handleAdd} handleEdit={handleEdit}/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
ContactSelect.propTypes = {
|
||||
order: PropTypes.instanceOf(Order),
|
||||
onChange: PropTypes.func,
|
||||
shop: PropTypes.instanceOf(Shop),
|
||||
};
|
||||
|
||||
export default ContactSelect;
|
||||
@ -1,34 +0,0 @@
|
||||
import {useEffect, useState} from 'react'
|
||||
import { container } from 'tsyringe'
|
||||
import { OrderState } from '../../state/order'
|
||||
import { SelectLabel } from '../base/SelectLabel'
|
||||
import React from 'react'
|
||||
|
||||
const DraftComponent = ({order}) => {
|
||||
|
||||
const [draft, setDraft] = useState(true)
|
||||
const orderState: OrderState = container.resolve(OrderState)
|
||||
|
||||
const onChange = (option) => {
|
||||
let orderObj = orderState.getCurrentOrder().value
|
||||
orderObj.draft = !draft
|
||||
orderState.setCurrentOrder(orderObj)
|
||||
setDraft(!draft)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
setDraft(order.draft)
|
||||
}, [order.draft])
|
||||
|
||||
return (
|
||||
<div className="gap-2">
|
||||
<label className="inline-flex items-center cursor-pointer">
|
||||
<input type="checkbox" value="1" className="sr-only peer" defaultChecked={draft} onChange={(e) => onChange(e)}/>
|
||||
<div className="relative w-11 h-6 bg-gray-200 rounded-full peer peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 dark:bg-gray-700 peer-checked:after:translate-x-full rtl:peer-checked:after:-translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-0.5 after:start-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600"></div>
|
||||
<span className="ms-3 text-sm font-medium text-gray-900 dark:text-gray-300">Entwurf</span>
|
||||
</label>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default DraftComponent
|
||||
@ -1,62 +0,0 @@
|
||||
import { AsyncPaginate } from "react-select-async-paginate"
|
||||
import {ShippingService} from "../../services/shipping"
|
||||
import * as PropTypes from "prop-types"
|
||||
import {Shop} from "../../model/shop"
|
||||
import {container} from "tsyringe"
|
||||
import {OrderState} from "../../state/order"
|
||||
import {Order} from "../../model/order"
|
||||
import {useEffect, useState} from "react"
|
||||
import React from 'react'
|
||||
|
||||
const InfoFieldComponent = ({shop, order}) => {
|
||||
|
||||
const [basketField1, setBasketField1] = useState<string>("");
|
||||
const [basketField2, setBasketField2] = useState<string>("");
|
||||
|
||||
const orderState = container.resolve(OrderState);
|
||||
|
||||
useEffect(() => {
|
||||
setBasketField1(order.basketField1)
|
||||
setBasketField2(order.basketField1)
|
||||
}, [order.basketField1, order.basketField2])
|
||||
|
||||
const changeBasketField1 = (value) => {
|
||||
let orderObj = orderState.getCurrentOrder().getValue()
|
||||
orderObj.basketField1 = value
|
||||
orderState.setCurrentOrder(orderObj)
|
||||
setBasketField1(value)
|
||||
}
|
||||
|
||||
const changeBasketField2 = (value) => {
|
||||
let orderObj = orderState.getCurrentOrder().getValue()
|
||||
orderObj.basketField2 = value
|
||||
orderState.setCurrentOrder(orderObj)
|
||||
setBasketField2(value)
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="">
|
||||
<div className={"flex"}>
|
||||
<div className={"flex-1"}>
|
||||
<div className='flex gap-1'>
|
||||
<input type="text" name="basketField1" value={basketField1} onChange={ e => changeBasketField1(e.target.value)} className={"bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"} placeholder={"Info 1"} />
|
||||
<label>{shop.basketField1}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div className={"flex-1"}>
|
||||
<div className='flex gap-1'>
|
||||
<input type="text" name="basketField2" value={basketField2} onChange={e => changeBasketField2(e.target.value)} className={"bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500"} placeholder={"Info 2"} />
|
||||
<label>{shop.basketField2}</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
InfoFieldComponent.propTypes = {
|
||||
order: PropTypes.instanceOf(Order),
|
||||
shop: PropTypes.instanceOf(Shop),
|
||||
};
|
||||
|
||||
export default InfoFieldComponent;
|
||||
@ -1,18 +0,0 @@
|
||||
import * as React from 'react';
|
||||
import * as PropTypes from "prop-types";
|
||||
import {Order} from "../../model/order";
|
||||
|
||||
const OrderAliasComponent = ({order}) => {
|
||||
|
||||
return (
|
||||
<div className={"m-1 p-2"}>
|
||||
<h4>NR: {order.alias}</h4>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
OrderAliasComponent.propTypes = {
|
||||
order: PropTypes.instanceOf(Order),
|
||||
};
|
||||
|
||||
export default OrderAliasComponent;
|
||||
@ -1,71 +0,0 @@
|
||||
import * as React from 'react'
|
||||
import { AsyncPaginate } from "react-select-async-paginate"
|
||||
import { PaymentService } from "../../services/payment"
|
||||
import * as PropTypes from "prop-types"
|
||||
import { Shop } from "../../model/shop"
|
||||
import { container } from "tsyringe"
|
||||
import { OrderState } from "../../state/order"
|
||||
import { Order } from "../../model/order"
|
||||
import { useEffect, useState } from "react"
|
||||
import Select from 'react-select'
|
||||
import { SelectLabel } from '../base/SelectLabel'
|
||||
|
||||
const PaymentComponent = ({ shop, order }) => {
|
||||
|
||||
const [shopUuid, setShopUuid] = useState(null)
|
||||
const orderState = container.resolve(OrderState)
|
||||
const [payment, setPayment] = useState(0)
|
||||
const payment_service = new PaymentService()
|
||||
|
||||
const loadOptions = async (searchQuery, loadedOptions) => {
|
||||
const data = await payment_service.getPayments(shop)
|
||||
|
||||
return {
|
||||
options: data,
|
||||
hasMore: false,
|
||||
}
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
setShopUuid(shop.uuid)
|
||||
}, [shop.uuid])
|
||||
|
||||
useEffect(() => {
|
||||
setPayment(order.payment.uid)
|
||||
}, [order.payment])
|
||||
|
||||
|
||||
const onChange = (option) => {
|
||||
order.payment = option
|
||||
let orderObj = orderState.getCurrentOrder().getValue()
|
||||
orderObj.payment = option
|
||||
orderState.setCurrentOrder(orderObj)
|
||||
setPayment(option.uid)
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={"p-2"}>
|
||||
<AsyncPaginate
|
||||
defaultOptions
|
||||
key={JSON.stringify(shopUuid)}
|
||||
components={{ Control: SelectLabel }}
|
||||
defaultValue={order.payment}
|
||||
loadOptions={loadOptions}
|
||||
placeholder=''
|
||||
name='Zahlart'
|
||||
getOptionValue={(option) => option.uid}
|
||||
getOptionLabel={(option) => option.title}
|
||||
onChange={onChange}
|
||||
isSearchable={false}
|
||||
className={`${payment == 0 ? "border border-red-500" : ""}`}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
PaymentComponent.propTypes = {
|
||||
shop: PropTypes.instanceOf(Shop),
|
||||
order: PropTypes.instanceOf(Order),
|
||||
}
|
||||
|
||||
export default PaymentComponent
|
||||
@ -1,83 +0,0 @@
|
||||
import * as React from 'react'
|
||||
import {useEffect, useState} from 'react'
|
||||
import * as PropTypes from "prop-types"
|
||||
import { Shop } from '../../model/shop'
|
||||
import {Product} from "../../model/product"
|
||||
import {ProductGroup} from "../../model/productGroup"
|
||||
import ProductGroupSelect from "../product/ProductGroupSelect"
|
||||
import ProductSelect from "../product/ProductSelect"
|
||||
import ProductForm from "../product/ProductForm"
|
||||
import {Order} from "../../model/order"
|
||||
import { Pos } from '../../model/pos'
|
||||
import Button from '../base/Button'
|
||||
import { Modal } from "flowbite-react";
|
||||
import React from 'react'
|
||||
|
||||
const AddPositionComponent = (props) => {
|
||||
|
||||
const [shop, setShop] = useState(null)
|
||||
|
||||
useEffect(() => {
|
||||
setShop(props.shop)
|
||||
}, [props.shop])
|
||||
|
||||
const [show, setShow] = useState(false)
|
||||
|
||||
const pos = new Pos();
|
||||
|
||||
const handleClose = () => setShow(false)
|
||||
const handleShow = () => setShow(true)
|
||||
|
||||
const [product, setProduct] = useState<Product>(new Product())
|
||||
const [productGroup, setProductGroup] = useState<ProductGroup>(new ProductGroup())
|
||||
|
||||
pos.product = product;
|
||||
|
||||
return (
|
||||
<div className='text-center'>
|
||||
<Button type={1} onClick={handleShow} variant="success"/>
|
||||
|
||||
<Modal size="7xl" show={show} onClose={() => handleClose()}
|
||||
>
|
||||
<Modal.Header>
|
||||
add position
|
||||
</Modal.Header>
|
||||
<Modal.Body className="min-h-96">
|
||||
<div className='flex'>
|
||||
<div className='flex-1'>
|
||||
<h4>ProductGroup</h4>
|
||||
<ProductGroupSelect
|
||||
value={productGroup}
|
||||
shop={props.shop}
|
||||
onChange={setProductGroup}
|
||||
/>
|
||||
</div>
|
||||
<div className='flex-1'>
|
||||
<h4>Product</h4>
|
||||
<ProductSelect
|
||||
value={product}
|
||||
shop={props.shop}
|
||||
productGroup={productGroup}
|
||||
onChange={setProduct}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ProductForm
|
||||
pos={pos}
|
||||
handleChange={props.addPos}
|
||||
handleClose={handleClose}
|
||||
/>
|
||||
</Modal.Body>
|
||||
</Modal>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
AddPositionComponent.propTypes = {
|
||||
shop: PropTypes.instanceOf(Shop),
|
||||
addPos: PropTypes.func
|
||||
}
|
||||
|
||||
|
||||
export default AddPositionComponent
|
||||
@ -1,49 +0,0 @@
|
||||
import {useEffect, useState} from 'react'
|
||||
import * as PropTypes from "prop-types"
|
||||
import { Shop } from '../../model/shop'
|
||||
import {Product} from "../../model/product"
|
||||
import {ProductGroup} from "../../model/productGroup"
|
||||
import ProductGroupSelect from "../product/ProductGroupSelect"
|
||||
import ProductSelect from "../product/ProductSelect"
|
||||
import { Pos } from '../../model/pos'
|
||||
import Button from '../base/Button'
|
||||
import ProductForm from '../product/ProductForm'
|
||||
import { Modal } from "flowbite-react";
|
||||
import React from 'react'
|
||||
|
||||
const EditPositionComponent = ({position, shop, changePos}) => {
|
||||
|
||||
const [show, setShow] = useState(false)
|
||||
|
||||
const handleClose = () => setShow(false)
|
||||
const handleShow = () => setShow(true)
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div>
|
||||
<Button type={2} variant="gray" onClick={handleShow}/>
|
||||
</div>
|
||||
|
||||
<Modal size="7xl" show={show} onClose={() => handleClose()}>
|
||||
<Modal.Header className="text-mauve12 m-0 text-[17px] font-medium">
|
||||
edit position
|
||||
</Modal.Header>
|
||||
<Modal.Body>
|
||||
<ProductForm
|
||||
pos={position}
|
||||
handleChange={changePos}
|
||||
handleClose={handleClose}
|
||||
/></Modal.Body>
|
||||
</Modal>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
EditPositionComponent.propTypes = {
|
||||
shop: PropTypes.instanceOf(Shop),
|
||||
position: PropTypes.instanceOf(Pos),
|
||||
changePos: PropTypes.func
|
||||
}
|
||||
|
||||
|
||||
export default EditPositionComponent
|
||||
@ -1,53 +0,0 @@
|
||||
import * as PropTypes from "prop-types"
|
||||
import PosComponent from "./PosComponent"
|
||||
import {useEffect} from "react"
|
||||
import {Order} from "../../model/order"
|
||||
import { Shop } from '../../model/shop'
|
||||
import React from 'react'
|
||||
|
||||
const ItemsComponent = ({positions, delPos, shop, changePos}) => {
|
||||
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className={'flex'}>
|
||||
<div className={'flex-1'}>
|
||||
<h5>Pos</h5>
|
||||
</div>
|
||||
<div className={'flex-1'}>
|
||||
<h5>Title</h5>
|
||||
</div>
|
||||
<div className={'flex-1'}>
|
||||
<h5>Anzahl</h5>
|
||||
</div>
|
||||
<div className={'flex-1 text-end'}>
|
||||
<h5>Netto</h5>
|
||||
</div>
|
||||
<div className={'flex-1 text-end'}>
|
||||
<h5>Tax</h5>
|
||||
</div>
|
||||
<div className={'flex-1 text-end'}>
|
||||
<h5>Gross</h5>
|
||||
</div>
|
||||
<div className={'flex-1 text-end'}>
|
||||
<h5>Status</h5>
|
||||
</div>
|
||||
<div className={'flex-1'}>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
{positions.map((object, i) => <PosComponent pos={object} shop={shop} delPos={delPos} changePos={changePos} key={i} index={i} />)}
|
||||
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
ItemsComponent.propTypes = {
|
||||
positions: PropTypes.array,
|
||||
delPos: PropTypes.func,
|
||||
changePos: PropTypes.func,
|
||||
shop: PropTypes.instanceOf(Shop)
|
||||
}
|
||||
|
||||
export default ItemsComponent
|
||||
@ -1,46 +0,0 @@
|
||||
import React from 'react'
|
||||
import * as PropTypes from "prop-types"
|
||||
import {Pos} from "../../model/pos"
|
||||
import Button from '../base/Button'
|
||||
import EditPositionComponent from './EditPositionComponent'
|
||||
import { Shop } from '../../model/shop'
|
||||
import Currency from '../base/Currency'
|
||||
|
||||
|
||||
const PosComponent = ({index, pos, delPos, changePos, shop}) => {
|
||||
|
||||
const deletePos = (uuid: String) => {
|
||||
delPos(uuid)
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className={'flex'}>
|
||||
<div className={'flex-1'}>{index + 1}</div>
|
||||
<div className={'flex-1'}>{pos.product.title}</div>
|
||||
<div className={'flex-1'}>{pos.count}</div>
|
||||
<div className={'flex-1 text-end'}><Currency price={ pos.price.allNet} /></div>
|
||||
<div className={'flex-1 text-end'}><Currency price={ pos.price.allVat} /></div>
|
||||
<div className={'flex-1 text-end'}><Currency price={ pos.price.allGross} /></div>
|
||||
<div className={'flex-1 text-end'}></div>
|
||||
<div className={'flex-1 text-end'}>
|
||||
<div className="flex gap-1">
|
||||
<EditPositionComponent shop={shop} position={pos} changePos={changePos} />
|
||||
<Button type={5} variant={'failure'} onClick={() => deletePos(pos.uuid)} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr/>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
PosComponent.propTypes = {
|
||||
index: PropTypes.number,
|
||||
pos: PropTypes.instanceOf(Pos),
|
||||
shop: PropTypes.instanceOf(Shop),
|
||||
delPos: PropTypes.func,
|
||||
changePos: PropTypes.func
|
||||
}
|
||||
|
||||
export default PosComponent
|
||||
@ -1,60 +0,0 @@
|
||||
import React from 'react'
|
||||
import AddPositionComponent from "./AddPositionComponent"
|
||||
import ItemsComponent from "./ItemsComponent"
|
||||
import * as PropTypes from "prop-types"
|
||||
import { Shop } from '../../model/shop'
|
||||
import {useEffect, useState} from "react"
|
||||
import {Pos} from "../../model/pos"
|
||||
import {Order} from "../../model/order"
|
||||
import {container} from "tsyringe"
|
||||
import {OrderState} from "../../state/order"
|
||||
|
||||
const PositionsComponent = ({order, shop, updateOrder}) => {
|
||||
|
||||
const orderState = container.resolve(OrderState)
|
||||
|
||||
const [positions, setPositions] = useState<Array<Pos>>(order.positions)
|
||||
|
||||
const addPos = (posObj) => {
|
||||
setPositions([...positions, posObj])
|
||||
}
|
||||
|
||||
const changePos = (posObj) => {
|
||||
const nextCounters = positions.map((c, i) => {
|
||||
if (c.uuid === posObj.uuid) {
|
||||
return posObj
|
||||
} else {
|
||||
return c
|
||||
}
|
||||
})
|
||||
setPositions(nextCounters)
|
||||
|
||||
}
|
||||
|
||||
const delPos = (uuid) => {
|
||||
let pos = positions.filter((obj) => obj.uuid !== uuid)
|
||||
|
||||
setPositions(pos)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
let orderObj = orderState.getCurrentOrder().value
|
||||
orderObj.positions = positions
|
||||
orderState.setCurrentOrder(orderObj)
|
||||
}, [positions])
|
||||
|
||||
return (
|
||||
<div className={"p-2"}>
|
||||
<ItemsComponent positions={positions} shop={shop} delPos={delPos} changePos={changePos}/>
|
||||
<AddPositionComponent shop={shop} addPos={addPos}/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
PositionsComponent.propTypes = {
|
||||
shop: PropTypes.instanceOf(Shop),
|
||||
order: PropTypes.instanceOf(Order),
|
||||
updateOrder: PropTypes.func
|
||||
}
|
||||
|
||||
export default PositionsComponent
|
||||
@ -1,121 +0,0 @@
|
||||
import * as PropTypes from 'prop-types'
|
||||
import { Shop } from '../../model/shop'
|
||||
import {Product} from "../../model/product"
|
||||
import validator from "@rjsf/validator-ajv6"
|
||||
import { JSONSchema7 } from "json-schema"
|
||||
import { container } from 'tsyringe'
|
||||
import Form from "@rjsf/core"
|
||||
import {ProductService} from "../../services/product"
|
||||
import {useEffect, useRef, useState} from "react"
|
||||
import {Price} from "../../model/price"
|
||||
import {Pos} from "../../model/pos"
|
||||
import { useDebouncedCallback } from 'use-debounce'
|
||||
import Button from '../base/Button'
|
||||
import Currency from '../base/Currency'
|
||||
import React from 'react'
|
||||
|
||||
const ProductForm = ({shop, pos, handleClose, handleChange}) => {
|
||||
const product_api = new ProductService()
|
||||
|
||||
const [schema, setSchema] = useState<JSONSchema7>({})
|
||||
const [uiSchema, setUiSchema] = useState<JSONSchema7>({})
|
||||
|
||||
const [formData, setFormData] = useState({})
|
||||
const [type, setType] = useState<number>(0)
|
||||
|
||||
const [price, setPrice] = useState<Price>(new Price())
|
||||
|
||||
const loadSchema = (loadData: any) => {
|
||||
if(pos.product.uuid == "") {
|
||||
return []
|
||||
}
|
||||
var data = {}
|
||||
|
||||
product_api.getAddProductSchema(pos.product, loadData).then((value) => {
|
||||
for(const obj in value['jsonForm']['properties']) {
|
||||
data[obj] = value['jsonForm']['properties'][obj]['default']
|
||||
}
|
||||
setFormData(data)
|
||||
setSchema(value['jsonForm'])
|
||||
setUiSchema(value['uiJsonForm'])
|
||||
setPrice(value['price'])
|
||||
setType(value['typ'])
|
||||
})
|
||||
}
|
||||
|
||||
const changeCalc = (formData) => {
|
||||
setFormData(formData)
|
||||
debounceReCalc()
|
||||
}
|
||||
|
||||
const debounceReCalc = useDebouncedCallback(() => {
|
||||
var data = {}
|
||||
|
||||
product_api.calcProduct(pos.product, formData).then((value) => {
|
||||
for(const obj in value['jsonForm']['properties']) {
|
||||
data[obj] = value['jsonForm']['properties'][obj]['default']
|
||||
}
|
||||
setFormData(data)
|
||||
setSchema(value['jsonForm'])
|
||||
setUiSchema(value['uiJsonForm'])
|
||||
setPrice(value['price'])
|
||||
setType(value['typ'])
|
||||
})
|
||||
}, 600)
|
||||
|
||||
const addProduct = () => {
|
||||
|
||||
pos.product.specialProductTypeObject.params = formData
|
||||
pos.product.specialProductTypeObject.typ = type
|
||||
if(formData['count']) {
|
||||
pos.count = formData['count']
|
||||
}
|
||||
|
||||
pos.price = price
|
||||
handleChange(pos)
|
||||
handleClose()
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
if(pos.product.specialProductTypeObject.params) {
|
||||
setFormData(pos.product.specialProductTypeObject.params)
|
||||
loadSchema(pos.product.specialProductTypeObject.params)
|
||||
}else{
|
||||
setFormData({})
|
||||
loadSchema({})
|
||||
}
|
||||
|
||||
}, [pos.product])
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className='flex'>
|
||||
<div className='flex-1'>
|
||||
<Form schema={schema}
|
||||
uiSchema={uiSchema}
|
||||
formData={formData}
|
||||
onChange={(e) => changeCalc(e.formData)}
|
||||
validator={validator}/>
|
||||
</div>
|
||||
<div className=''>
|
||||
<>
|
||||
<h5>Netto: <Currency price={ price.allNet} /></h5>
|
||||
<h5>Mwert: <Currency price={ price.allVat} /></h5>
|
||||
<h4>Brutto: <Currency price={ price.allGross} /></h4>
|
||||
<Button onClick={addProduct} type={3} variant={"success"} />
|
||||
</>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
ProductForm.propTypes = {
|
||||
shop: PropTypes.instanceOf(Shop),
|
||||
pos: PropTypes.instanceOf(Pos),
|
||||
handleClose: PropTypes.func,
|
||||
handleChange: PropTypes.func
|
||||
}
|
||||
|
||||
export default ProductForm
|
||||
@ -1,44 +0,0 @@
|
||||
import * as PropTypes from 'prop-types';
|
||||
import { Shop } from '../../model/shop';
|
||||
import { container } from 'tsyringe';
|
||||
import { OrderState } from '../../state/order';
|
||||
import {ProductGroup} from "../../model/productGroup";
|
||||
import {ProductGroupService} from "../../services/productgroup";
|
||||
import AsyncSelect , { useAsync } from 'react-select/async';
|
||||
import React from 'react'
|
||||
|
||||
const ProductGroupSelect = (props) => {
|
||||
const orderState: OrderState = container.resolve(OrderState);
|
||||
|
||||
const loadOptions = async (searchQuery) => {
|
||||
const productgroup_api = new ProductGroupService();
|
||||
|
||||
return await productgroup_api.getProductGroups(searchQuery, props.shop);
|
||||
};
|
||||
|
||||
const onChange = (option) => {
|
||||
if (typeof props.onChange === "function") {
|
||||
props.onChange(option);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<AsyncSelect
|
||||
defaultOptions
|
||||
key={JSON.stringify(props.shop.uuid)}
|
||||
value={props.value}
|
||||
loadOptions={loadOptions}
|
||||
getOptionValue={(option) => option.uuid}
|
||||
onChange={onChange}
|
||||
isSearchable={true}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
ProductGroupSelect.propTypes = {
|
||||
shop: PropTypes.instanceOf(Shop),
|
||||
value: PropTypes.instanceOf(ProductGroup),
|
||||
onChange: PropTypes.func,
|
||||
};
|
||||
|
||||
export default ProductGroupSelect;
|
||||
@ -1,57 +0,0 @@
|
||||
import * as PropTypes from 'prop-types';
|
||||
import { Shop } from '../../model/shop';
|
||||
import { container } from 'tsyringe';
|
||||
import { OrderState } from '../../state/order';
|
||||
import {Product} from "../../model/product";
|
||||
import {ProductGroup} from "../../model/productGroup";
|
||||
import AsyncSelect from "react-select/async";
|
||||
import {ProductService} from "../../services/product";
|
||||
import {useDebounce} from "use-debounce";
|
||||
import React from 'react'
|
||||
|
||||
const ProductSelect = (props) => {
|
||||
|
||||
const orderState: OrderState = container.resolve(OrderState);
|
||||
|
||||
const loadOptions = async (searchQuery) => {
|
||||
if(searchQuery == "" && props.productGroup.uuid == "") {
|
||||
return [];
|
||||
}
|
||||
const product_api = new ProductService();
|
||||
if(searchQuery != "") {
|
||||
return await product_api.getProductsByTerm(searchQuery, props.shop);
|
||||
}else{
|
||||
return await product_api.getProducts(props.productGroup);
|
||||
}
|
||||
};
|
||||
|
||||
const debouncedSearchTerm = useDebounce(loadOptions, 500);
|
||||
|
||||
const onChange = (option) => {
|
||||
if (typeof props.onChange === "function") {
|
||||
props.onChange(option);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<AsyncSelect
|
||||
defaultOptions
|
||||
key={JSON.stringify(props.productGroup.uuid)}
|
||||
value={props.value}
|
||||
loadOptions={loadOptions}
|
||||
getOptionValue={(option) => option.uuid}
|
||||
getOptionLabel={(option) => option.title}
|
||||
onChange={onChange}
|
||||
isSearchable={true}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
ProductSelect.propTypes = {
|
||||
shop: PropTypes.instanceOf(Shop),
|
||||
value: PropTypes.instanceOf(Product),
|
||||
productGroup: PropTypes.instanceOf(ProductGroup),
|
||||
onChange: PropTypes.func,
|
||||
};
|
||||
|
||||
export default ProductSelect;
|
||||
@ -1,70 +0,0 @@
|
||||
import * as React from 'react'
|
||||
import { AsyncPaginate } from "react-select-async-paginate"
|
||||
import {ShippingService} from "../../services/shipping"
|
||||
import * as PropTypes from "prop-types"
|
||||
import {Shop} from "../../model/shop"
|
||||
import {container} from "tsyringe"
|
||||
import {OrderState} from "../../state/order"
|
||||
import {Order} from "../../model/order"
|
||||
import {useEffect, useState} from "react"
|
||||
import { SelectLabel } from '../base/SelectLabel'
|
||||
import React from 'react'
|
||||
|
||||
const ShippingComponent = ({shop, order}) => {
|
||||
|
||||
const [shopUuid, setShopUuid] = useState(null)
|
||||
const orderState = container.resolve(OrderState)
|
||||
const [shipping, setShipping] = useState(0)
|
||||
const shipping_service = new ShippingService()
|
||||
|
||||
const loadOptions = async (searchQuery, loadedOptions) => {
|
||||
const data = await shipping_service.getShipping(shop)
|
||||
|
||||
return {
|
||||
options: data,
|
||||
hasMore: false,
|
||||
}
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
setShopUuid(shop.uuid)
|
||||
}, [shop.uuid])
|
||||
|
||||
useEffect(() => {
|
||||
setShipping(order.shipping.uid)
|
||||
}, [order.shipping])
|
||||
|
||||
const onChange = (option) => {
|
||||
order.shipping = option
|
||||
let orderObj = orderState.getCurrentOrder().getValue()
|
||||
orderObj.shipping = option
|
||||
orderState.setCurrentOrder(orderObj)
|
||||
setShipping(option.uid)
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={"p-2"}>
|
||||
<AsyncPaginate
|
||||
defaultOptions
|
||||
key={JSON.stringify(shopUuid)}
|
||||
components={{Control: SelectLabel}}
|
||||
defaultValue={order.shipping}
|
||||
placeholder=''
|
||||
name='Versandart'
|
||||
loadOptions={loadOptions}
|
||||
getOptionValue={(option) => option.uid}
|
||||
getOptionLabel={(option) => option.title}
|
||||
onChange={onChange}
|
||||
isSearchable={false}
|
||||
className={`${shipping == 0 ? "border border-red-500" : ""}`}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
ShippingComponent.propTypes = {
|
||||
shop: PropTypes.instanceOf(Shop),
|
||||
order: PropTypes.instanceOf(Order),
|
||||
}
|
||||
|
||||
export default ShippingComponent
|
||||
@ -1,49 +0,0 @@
|
||||
import { AsyncPaginate } from "react-select-async-paginate"
|
||||
import { ShopService } from '../../services/shop'
|
||||
import { container } from 'tsyringe'
|
||||
import { OrderState } from '../../state/order'
|
||||
import { SelectLabel } from '../base/SelectLabel'
|
||||
import React from 'react'
|
||||
|
||||
const ShopSelectComponent = (props) => {
|
||||
|
||||
const orderState = container.resolve(OrderState)
|
||||
|
||||
const shop_service = container.resolve(ShopService)
|
||||
|
||||
const loadOptions = async (searchQuery, loadedOptions) => {
|
||||
|
||||
const data = await shop_service.getShops()
|
||||
|
||||
return {
|
||||
options: data,
|
||||
hasMore: false,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const onChange = (option) => {
|
||||
orderState.getCurrentOrder().value.shop = option
|
||||
props.change(option)
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<AsyncPaginate
|
||||
defaultOptions
|
||||
value={props.shop}
|
||||
components={{ Control: SelectLabel }}
|
||||
loadOptions={loadOptions}
|
||||
getOptionValue={(option) => option.id}
|
||||
getOptionLabel={(option) => option.name}
|
||||
onChange={onChange}
|
||||
isSearchable={false}
|
||||
className={`${props.shop.uuid == "" ? "border border-danger" : "border border-slate-200"}`}
|
||||
name='Shop'
|
||||
/>
|
||||
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default ShopSelectComponent
|
||||
@ -1,36 +0,0 @@
|
||||
import TypeSelectComponent from '../type/TypeSelectComponent'
|
||||
import ShopSelectComponent from '../shop/ShopSelectComponent'
|
||||
import * as PropTypes from "prop-types"
|
||||
import {Shop} from "../../model/shop"
|
||||
import DraftComponent from "../draft/DraftComponent"
|
||||
import {Order} from "../../model/order"
|
||||
import CalcComponent from '../calc/CalcComponent'
|
||||
import React from 'react'
|
||||
|
||||
const TopBarComponent = ({shop, order, change}) => {
|
||||
|
||||
return (
|
||||
<div className="flex gap-3">
|
||||
<div>
|
||||
<DraftComponent order={order} />
|
||||
</div>
|
||||
<div className="flex-auto">
|
||||
<TypeSelectComponent order={order} />
|
||||
</div>
|
||||
<div className="flex-auto">
|
||||
<ShopSelectComponent shop={shop} change={change} />
|
||||
</div>
|
||||
<div>
|
||||
<CalcComponent />
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
TopBarComponent.propTypes = {
|
||||
shop: PropTypes.instanceOf(Shop),
|
||||
order: PropTypes.instanceOf(Order),
|
||||
change: PropTypes.func
|
||||
}
|
||||
|
||||
export default TopBarComponent
|
||||
@ -1,51 +0,0 @@
|
||||
import Select from 'react-select'
|
||||
import {useEffect, useState} from 'react'
|
||||
import { container } from 'tsyringe'
|
||||
import { OrderState } from '../../state/order'
|
||||
import { SelectLabel } from '../base/SelectLabel'
|
||||
import React from 'react'
|
||||
|
||||
const TypeSelectComponent = ({order}) => {
|
||||
|
||||
const [type, setType] = useState(0);
|
||||
const orderState: OrderState = container.resolve(OrderState);
|
||||
|
||||
const options = [
|
||||
{ value: 1, label: 'Auftrag' },
|
||||
{ value: 2, label: 'Angebot' },
|
||||
{ value: 3, label: 'Storno' },
|
||||
{ value: 4, label: 'Gutschrift' },
|
||||
{ value: 5, label: 'Rechnung' },
|
||||
{ value: 6, label: 'Teilrechnung' },
|
||||
{ value: 7, label: 'Teilstorno' },
|
||||
];
|
||||
|
||||
const onChange = (option) => {
|
||||
let order = orderState.getCurrentOrder().value;
|
||||
order.type = option.value;
|
||||
orderState.setCurrentOrder(order);
|
||||
setType(option);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
setType(order.type);
|
||||
}, [order.type]);
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Select
|
||||
|
||||
className={`${type == 0 ? "border border-danger" : ""}`}
|
||||
options={options}
|
||||
defaultValue={options.filter((e) => e.value == type).pop()}
|
||||
value={options.filter((e) => e.value == type).pop()}
|
||||
onChange={onChange}
|
||||
components={{ Control: SelectLabel }}
|
||||
placeholder=""
|
||||
name="Typ"
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default TypeSelectComponent;
|
||||
@ -1,30 +0,0 @@
|
||||
import {autoInjectable, singleton} from "tsyringe";
|
||||
import { Token } from "./token";
|
||||
import axios from 'axios';
|
||||
import { Account } from "../model/account";
|
||||
import { Shop } from "../model/shop";
|
||||
|
||||
@singleton()
|
||||
@autoInjectable()
|
||||
export class AccountService {
|
||||
constructor(private token?: Token) {}
|
||||
|
||||
async getAccounts(shop: Shop): Promise<Account[]> {
|
||||
|
||||
return await axios.get('/apps/api/account/allbyshop/' + shop.uuid, {
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + this.token?.currentToken
|
||||
}
|
||||
}).then(( response ) => {
|
||||
return response.data.data.map((item: any) => {
|
||||
let account = new Account();
|
||||
account.uid = item.uid;
|
||||
account.title = item.title;
|
||||
account.appendix = item.appendix;
|
||||
account.uuid = item.uuid;
|
||||
return account;
|
||||
})
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -1,57 +0,0 @@
|
||||
import {autoInjectable, singleton} from "tsyringe"
|
||||
import { Token } from "./token"
|
||||
import axios from 'axios'
|
||||
import { Address } from "../model/address"
|
||||
|
||||
@singleton()
|
||||
@autoInjectable()
|
||||
export class AddressService {
|
||||
constructor(private token?: Token) {}
|
||||
|
||||
async create(address: Address): Promise<Address> {
|
||||
|
||||
return await axios.post('/apps/api/contact/address/create', {'address': address} ,{
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + this.token?.currentToken
|
||||
}
|
||||
}).then(( response ) => {
|
||||
return response.data
|
||||
})
|
||||
}
|
||||
|
||||
async update(address: Address): Promise<Address> {
|
||||
|
||||
return await axios.put('/apps/api/contact/address/update/' + address.uuid, {'address': address} ,{
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + this.token?.currentToken
|
||||
}
|
||||
}).then(( response ) => {
|
||||
return response.data
|
||||
})
|
||||
}
|
||||
|
||||
async getContactAddress(contact: String, type: Number): Promise<Address[]> {
|
||||
return await axios.get('/apps/api/contact/address/getallfortype/' + contact + '/' + type, {
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + this.token?.currentToken
|
||||
}
|
||||
}).then(( response ) => {
|
||||
return response.data.data.map((item: any) => {
|
||||
let address = new Address
|
||||
address.uid = item.uid
|
||||
address.firstname = item.firstname
|
||||
address.lastname = item.lastname
|
||||
address.street = item.street
|
||||
address.country = item.country
|
||||
address.ustid = item.ustid
|
||||
address.houseNumber = item.houseNumber
|
||||
address.zip = item.zip
|
||||
address.city = item.city
|
||||
address.company = item.company
|
||||
address.company2 = item.company2
|
||||
address.uuid = item.uuid
|
||||
return address
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -1,51 +0,0 @@
|
||||
import {autoInjectable, singleton} from "tsyringe";
|
||||
import { Token } from "./token";
|
||||
import axios from 'axios';
|
||||
import { Contact } from "../model/contact";
|
||||
import { Address } from "../model/address";
|
||||
import { Shop } from "../model/shop";
|
||||
|
||||
@singleton()
|
||||
@autoInjectable()
|
||||
export class ContactService {
|
||||
constructor(private token?: Token) {}
|
||||
|
||||
async createContact(contact: Contact): Promise<Contact> {
|
||||
|
||||
return await axios.post('/apps/api/contact/create', {'contact': contact} ,{
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + this.token?.currentToken
|
||||
}
|
||||
}).then(( response ) => {
|
||||
return response.data;
|
||||
});
|
||||
}
|
||||
|
||||
async updateContact(contact: Contact): Promise<Contact> {
|
||||
|
||||
return await axios.put('/apps/api/contact/update/' + contact.uuid, {'contact': contact} ,{
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + this.token?.currentToken
|
||||
}
|
||||
}).then(( response ) => {
|
||||
return response.data;
|
||||
});
|
||||
}
|
||||
|
||||
async getContacts(searchQuery: String, page: Number, shop: Shop): Promise<Contact[]> {
|
||||
|
||||
return await axios.get('/apps/api/contact/allbyshop/' + shop.uuid + '?term=' + searchQuery + '&page=' + page, {
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + this.token?.currentToken
|
||||
}
|
||||
}).then(( response ) => {
|
||||
return response.data.data.map((item: any) => {
|
||||
let contact = new Contact;
|
||||
contact.parseFromJson({contact: item});
|
||||
return contact;
|
||||
})
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,21 +0,0 @@
|
||||
import {autoInjectable, singleton} from "tsyringe"
|
||||
import axios from 'axios'
|
||||
import { Shop } from "../model/shop"
|
||||
import { Country } from "../model/country"
|
||||
|
||||
@singleton()
|
||||
@autoInjectable()
|
||||
export class CountryService {
|
||||
|
||||
async getCountry(shop: Shop): Promise<Country[]> {
|
||||
|
||||
return await axios.get('/apps/api/country/by/shop/' + shop.uuid).then(( response ) => {
|
||||
return response.data.data.map((item: any) => {
|
||||
let country = new Country()
|
||||
country.parseFromJson(item)
|
||||
return country
|
||||
})
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -1,49 +0,0 @@
|
||||
import {autoInjectable, singleton} from "tsyringe";
|
||||
import { Token } from "./token";
|
||||
import axios from 'axios';
|
||||
import {Order} from "../model/order";
|
||||
|
||||
@singleton()
|
||||
@autoInjectable()
|
||||
export class OrderService {
|
||||
|
||||
constructor(private token?: Token) {}
|
||||
|
||||
async getOrder(uuid: String): Promise<Order> {
|
||||
|
||||
return await axios.post('/apps/api/order/getonebyuuid', {uuid: uuid} ,{
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + this.token?.currentToken
|
||||
}
|
||||
}).then(( response ) => {
|
||||
|
||||
let order = new Order();
|
||||
order.parseFromJson(response.data);
|
||||
|
||||
return order;
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
async saveOrder(order: Order): Promise<Order> {
|
||||
return await axios.post('/apps/api/order/create', order ,{
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + this.token?.currentToken
|
||||
}
|
||||
}).then(( response ) => {
|
||||
return response.data;
|
||||
});
|
||||
}
|
||||
|
||||
async calcOrder(order: Order): Promise<Order> {
|
||||
|
||||
return await axios.post('/apps/api/order/calc', order ,{
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + this.token?.currentToken
|
||||
}
|
||||
}).then(( response ) => {
|
||||
return response.data;
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,29 +0,0 @@
|
||||
import {autoInjectable, singleton} from "tsyringe"
|
||||
import { Token } from "./token"
|
||||
import axios from 'axios'
|
||||
import { Shop } from "../model/shop"
|
||||
import {Payment} from "../model/payment"
|
||||
|
||||
@singleton()
|
||||
@autoInjectable()
|
||||
export class PaymentService {
|
||||
constructor(private token?: Token) {}
|
||||
|
||||
async getPayments(shop: Shop): Promise<Payment[]> {
|
||||
|
||||
return await axios.get('/apps/api/payment/by/shop/' + shop.uuid, {
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + this.token?.currentToken
|
||||
}
|
||||
}).then(( response ) => {
|
||||
return response.data.data.map((item: any) => {
|
||||
let payment = new Payment()
|
||||
payment.uid = item.uid
|
||||
payment.title = item.title
|
||||
payment.uuid = item.uuid
|
||||
return payment
|
||||
})
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -1,73 +0,0 @@
|
||||
import {autoInjectable, singleton} from "tsyringe";
|
||||
import { Token } from "./token";
|
||||
import axios from 'axios';
|
||||
import { Shop } from "../model/shop";
|
||||
import {ProductGroup} from "../model/productGroup";
|
||||
import {Product} from "../model/product";
|
||||
import {JSONSchema7} from "json-schema";
|
||||
|
||||
@singleton()
|
||||
@autoInjectable()
|
||||
export class ProductService {
|
||||
constructor(private token?: Token) {}
|
||||
|
||||
async getProductsByTerm(term: string, shop: Shop): Promise<Product[]> {
|
||||
|
||||
return await axios.get('/apps/api/product/getallbyterm/' + shop.uuid + '/' + term, {
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + this.token?.currentToken
|
||||
}
|
||||
}).then(( response ) => {
|
||||
return response.data.data.map((item: any) => {
|
||||
let p = new Product();
|
||||
p.id = item.id;
|
||||
p.title = item.title;
|
||||
p.uuid = item.uuid;
|
||||
p.specialProductTypeObject.typ = item.typ;
|
||||
|
||||
return p;
|
||||
})
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
async getProducts(productGroup: ProductGroup): Promise<Product[]> {
|
||||
|
||||
return await axios.get('/apps/api/product/getallbyproductgroup/' + productGroup.uuid, {
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + this.token?.currentToken
|
||||
}
|
||||
}).then(( response ) => {
|
||||
return response.data.data.map((item: any) => {
|
||||
let p = new Product();
|
||||
p.id = item.id;
|
||||
p.title = item.title;
|
||||
p.uuid = item.uuid;
|
||||
p.specialProductTypeObject.typ = item.typ;
|
||||
|
||||
return p;
|
||||
})
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
async getAddProductSchema(product: Product, formData: any): Promise<JSONSchema7> {
|
||||
return await axios.post('/apps/api/product/get/form/json/' + product.uuid, formData, {
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + this.token?.currentToken
|
||||
}
|
||||
}).then(( response ) => {
|
||||
return response.data;
|
||||
})
|
||||
}
|
||||
|
||||
async calcProduct(product: Product, formData): Promise<JSONSchema7> {
|
||||
return await axios.post('/apps/api/product/get/form/json/' + product.uuid, formData, {
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + this.token?.currentToken
|
||||
}
|
||||
}).then(( response ) => {
|
||||
return response.data;
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -1,44 +0,0 @@
|
||||
import {autoInjectable, singleton} from "tsyringe";
|
||||
import { Token } from "./token";
|
||||
import axios from 'axios';
|
||||
import { Shop } from "../model/shop";
|
||||
import {ProductGroup} from "../model/productGroup";
|
||||
|
||||
@singleton()
|
||||
@autoInjectable()
|
||||
export class ProductGroupService {
|
||||
constructor(private token?: Token) {}
|
||||
|
||||
async getProductGroups(searchQuery: String, shop: Shop): Promise<ProductGroup[]> {
|
||||
|
||||
return await axios.get('/apps/api/productgroup/gettree/' + shop.uuid + '?term=' + searchQuery, {
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + this.token.currentToken
|
||||
}
|
||||
}).then(( response ) => {
|
||||
|
||||
let temp: ProductGroup[] = [];
|
||||
|
||||
response.data.data.map((item: any) => {
|
||||
let pg = new ProductGroup;
|
||||
pg.id = item.id;
|
||||
pg.label = item.title;
|
||||
pg.uuid = item.uuid;
|
||||
|
||||
temp.push(pg);
|
||||
|
||||
item.children.map((sub: any) => {
|
||||
let spg = new ProductGroup;
|
||||
spg.id = sub.id;
|
||||
spg.label = "-- " + sub.title;
|
||||
spg.uuid = sub.uuid;
|
||||
temp.push(spg);
|
||||
});
|
||||
|
||||
return pg;
|
||||
})
|
||||
|
||||
return temp;
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -1,29 +0,0 @@
|
||||
import {autoInjectable, singleton} from "tsyringe"
|
||||
import { Token } from "./token"
|
||||
import axios from 'axios'
|
||||
import { Shop } from "../model/shop"
|
||||
import {Shipping} from "../model/shipping"
|
||||
|
||||
@singleton()
|
||||
@autoInjectable()
|
||||
export class ShippingService {
|
||||
constructor(private token?: Token) {}
|
||||
|
||||
async getShipping(shop: Shop): Promise<Shipping[]> {
|
||||
|
||||
return await axios.get('/apps/api/shipping/by/shop/' + shop.uuid, {
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + this.token?.currentToken
|
||||
}
|
||||
}).then(( response ) => {
|
||||
return response.data.data.map((item: any) => {
|
||||
let shipment = new Shipping()
|
||||
shipment.uid = item.uid
|
||||
shipment.title = item.title
|
||||
shipment.uuid = item.uuid
|
||||
return shipment
|
||||
})
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -1,27 +0,0 @@
|
||||
import {autoInjectable, singleton} from "tsyringe"
|
||||
import { Token } from "./token"
|
||||
import axios from 'axios'
|
||||
import { Shop } from "../model/shop"
|
||||
|
||||
@singleton()
|
||||
@autoInjectable()
|
||||
export class ShopService {
|
||||
constructor(private token: Token) {}
|
||||
|
||||
async getShops(): Promise<Shop[]> {
|
||||
|
||||
console.log(this.token)
|
||||
return await axios.get('/apps/api/shops', {
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + this.token.currentToken
|
||||
}
|
||||
}).then(( response ) => {
|
||||
return response.data.data.map((item: any) => {
|
||||
let shop = new Shop()
|
||||
shop.parseFromJson({shop: item})
|
||||
return shop
|
||||
})
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -1,22 +0,0 @@
|
||||
import axios from "axios"
|
||||
import {singleton} from "tsyringe"
|
||||
|
||||
@singleton()
|
||||
export class Token {
|
||||
public currentToken:String
|
||||
|
||||
init() {
|
||||
setInterval(() => {
|
||||
this.refreshToken()
|
||||
}, 2*60*1000)
|
||||
}
|
||||
refreshToken(): void {
|
||||
axios.get('/apps/api/contact/refresh', {
|
||||
headers: {
|
||||
'Authorization': 'Bearer ' + this.currentToken
|
||||
}
|
||||
}).then(( response ) => {
|
||||
this.currentToken = response.data.token
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -1,31 +0,0 @@
|
||||
import {singleton} from "tsyringe"
|
||||
import {Order} from "../model/order"
|
||||
import {observeObject} from "../lib/ob-ob"
|
||||
import {BehaviorSubject, Observable, of, Subject} from "rxjs"
|
||||
|
||||
@singleton()
|
||||
export class OrderState {
|
||||
|
||||
orders: Array<Order>
|
||||
private currentOrder: BehaviorSubject<Order>
|
||||
|
||||
constructor() {
|
||||
this.currentOrder = new BehaviorSubject<Order>(new Order())
|
||||
}
|
||||
|
||||
getCurrentOrder() {
|
||||
return this.currentOrder
|
||||
}
|
||||
|
||||
setCurrentOrder(order: Order) {
|
||||
this.currentOrder.next(order)
|
||||
}
|
||||
|
||||
getOrder(uuid: String) {
|
||||
return this.orders.map((e) => e.uuid == uuid)
|
||||
}
|
||||
|
||||
updateOrder(order: Order) {
|
||||
this.orders.push(order)
|
||||
}
|
||||
}
|
||||
@ -1,13 +0,0 @@
|
||||
const flowbite = require("flowbite-react/tailwind");
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
module.exports = {
|
||||
content: [
|
||||
'./src/**/*.{js,jsx,ts,tsx}',
|
||||
flowbite.content()
|
||||
],
|
||||
theme: {
|
||||
extend: {},
|
||||
},
|
||||
plugins: [flowbite.plugin()],
|
||||
}
|
||||
|
||||
@ -1,19 +0,0 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"jsx": "react-jsx",
|
||||
"module": "commonjs",
|
||||
"experimentalDecorators": true,
|
||||
"esModuleInterop": true,
|
||||
"noUnusedLocals": false,
|
||||
"strict": false,
|
||||
"noImplicitAny": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"lib": [
|
||||
"dom",
|
||||
"es5",
|
||||
"scripthost",
|
||||
"es2015.collection",
|
||||
"es2015.proxy"
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -1,980 +0,0 @@
|
||||
Arguments:
|
||||
/root/.nvm/versions/node/v19.2.0/bin/node /root/.nvm/versions/node/v19.2.0/bin/yarn install
|
||||
|
||||
PATH:
|
||||
/root/.cargo/bin:/root/.nvm/versions/node/v19.2.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/Program Files/Microsoft/jdk-11.0.12.7-hotspot/bin:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/System32/OpenSSH/:/mnt/c/Program Files/dotnet/:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/System32/OpenSSH/:/mnt/c/Program Files/Git/cmd:/mnt/c/Program Files/PuTTY/:/mnt/c/Program Files/Docker/Docker/resources/bin:/mnt/c/Users/info/.cargo/bin:/mnt/c/Users/info/AppData/Local/Microsoft/WindowsApps:/mnt/c/Program Files/JetBrains/PhpStorm 2022.2.2/bin:/mnt/c/Users/info/.dotnet/tools:/mnt/c/Users/info/AppData/Local/Programs/Microsoft VS Code/bin:/snap/bin
|
||||
|
||||
Yarn version:
|
||||
1.22.19
|
||||
|
||||
Node version:
|
||||
19.2.0
|
||||
|
||||
Platform:
|
||||
linux x64
|
||||
|
||||
Trace:
|
||||
SyntaxError: /root/projekte/pscdevmake/src/new/var/plugins/System/PSC/Invoice/Webpack/package.json: Expected double-quoted property name in JSON at position 873
|
||||
at JSON.parse (<anonymous>)
|
||||
at /root/.nvm/versions/node/v19.2.0/lib/node_modules/yarn/lib/cli.js:1629:59
|
||||
at Generator.next (<anonymous>)
|
||||
at step (/root/.nvm/versions/node/v19.2.0/lib/node_modules/yarn/lib/cli.js:310:30)
|
||||
at /root/.nvm/versions/node/v19.2.0/lib/node_modules/yarn/lib/cli.js:321:13
|
||||
|
||||
npm manifest:
|
||||
{
|
||||
"name": "webpack",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@rjsf/core": "^5.0.0-beta.11",
|
||||
"@rjsf/utils": "^5.0.0-beta.11",
|
||||
"@rjsf/validator-ajv6": "^5.0.0-beta.11",
|
||||
"axios": "^0.27.2",
|
||||
"debounce-promise": "^3.1.2",
|
||||
"eta": "^1.12.3",
|
||||
"prop-types": "^15.8.1",
|
||||
"react": "^18.2.0",
|
||||
"react-bootstrap": "^2.5.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-select": "^5.4.0",
|
||||
"react-select-async-paginate": "^0.6.2",
|
||||
"reflect-metadata": "^0.1.13",
|
||||
"rxjs": "^7.5.6",
|
||||
"tsyringe": "^4.7.0",
|
||||
"use-debounce": "^9.0.2",
|
||||
"uuid": "^8.3.2",
|
||||
"zustand": "^4.1.1",
|
||||
"@types/react": "^18.0.26",
|
||||
"@types/react-dom": "^18.0.9",
|
||||
"react-router-dom": "^6.5.0",
|
||||
}
|
||||
}
|
||||
|
||||
yarn manifest:
|
||||
No manifest
|
||||
|
||||
Lockfile:
|
||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@babel/code-frame@^7.0.0":
|
||||
version "7.18.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a"
|
||||
integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==
|
||||
dependencies:
|
||||
"@babel/highlight" "^7.18.6"
|
||||
|
||||
"@babel/helper-module-imports@^7.16.7":
|
||||
version "7.18.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e"
|
||||
integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==
|
||||
dependencies:
|
||||
"@babel/types" "^7.18.6"
|
||||
|
||||
"@babel/helper-plugin-utils@^7.18.6":
|
||||
version "7.20.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629"
|
||||
integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==
|
||||
|
||||
"@babel/helper-string-parser@^7.19.4":
|
||||
version "7.19.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63"
|
||||
integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==
|
||||
|
||||
"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1":
|
||||
version "7.19.1"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
|
||||
integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
|
||||
|
||||
"@babel/highlight@^7.18.6":
|
||||
version "7.18.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf"
|
||||
integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==
|
||||
dependencies:
|
||||
"@babel/helper-validator-identifier" "^7.18.6"
|
||||
chalk "^2.0.0"
|
||||
js-tokens "^4.0.0"
|
||||
|
||||
"@babel/plugin-syntax-jsx@^7.17.12":
|
||||
version "7.18.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0"
|
||||
integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==
|
||||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.18.6"
|
||||
|
||||
"@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.7":
|
||||
version "7.20.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.6.tgz#facf4879bfed9b5326326273a64220f099b0fce3"
|
||||
integrity sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==
|
||||
dependencies:
|
||||
regenerator-runtime "^0.13.11"
|
||||
|
||||
"@babel/types@^7.18.6":
|
||||
version "7.20.5"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.5.tgz#e206ae370b5393d94dfd1d04cd687cace53efa84"
|
||||
integrity sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==
|
||||
dependencies:
|
||||
"@babel/helper-string-parser" "^7.19.4"
|
||||
"@babel/helper-validator-identifier" "^7.19.1"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@emotion/babel-plugin@^11.10.5":
|
||||
version "11.10.5"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz#65fa6e1790ddc9e23cc22658a4c5dea423c55c3c"
|
||||
integrity sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==
|
||||
dependencies:
|
||||
"@babel/helper-module-imports" "^7.16.7"
|
||||
"@babel/plugin-syntax-jsx" "^7.17.12"
|
||||
"@babel/runtime" "^7.18.3"
|
||||
"@emotion/hash" "^0.9.0"
|
||||
"@emotion/memoize" "^0.8.0"
|
||||
"@emotion/serialize" "^1.1.1"
|
||||
babel-plugin-macros "^3.1.0"
|
||||
convert-source-map "^1.5.0"
|
||||
escape-string-regexp "^4.0.0"
|
||||
find-root "^1.1.0"
|
||||
source-map "^0.5.7"
|
||||
stylis "4.1.3"
|
||||
|
||||
"@emotion/cache@^11.10.5", "@emotion/cache@^11.4.0":
|
||||
version "11.10.5"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.5.tgz#c142da9351f94e47527ed458f7bbbbe40bb13c12"
|
||||
integrity sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==
|
||||
dependencies:
|
||||
"@emotion/memoize" "^0.8.0"
|
||||
"@emotion/sheet" "^1.2.1"
|
||||
"@emotion/utils" "^1.2.0"
|
||||
"@emotion/weak-memoize" "^0.3.0"
|
||||
stylis "4.1.3"
|
||||
|
||||
"@emotion/hash@^0.9.0":
|
||||
version "0.9.0"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7"
|
||||
integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==
|
||||
|
||||
"@emotion/memoize@^0.8.0":
|
||||
version "0.8.0"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f"
|
||||
integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==
|
||||
|
||||
"@emotion/react@^11.8.1":
|
||||
version "11.10.5"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.5.tgz#95fff612a5de1efa9c0d535384d3cfa115fe175d"
|
||||
integrity sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.18.3"
|
||||
"@emotion/babel-plugin" "^11.10.5"
|
||||
"@emotion/cache" "^11.10.5"
|
||||
"@emotion/serialize" "^1.1.1"
|
||||
"@emotion/use-insertion-effect-with-fallbacks" "^1.0.0"
|
||||
"@emotion/utils" "^1.2.0"
|
||||
"@emotion/weak-memoize" "^0.3.0"
|
||||
hoist-non-react-statics "^3.3.1"
|
||||
|
||||
"@emotion/serialize@^1.1.1":
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.1.tgz#0595701b1902feded8a96d293b26be3f5c1a5cf0"
|
||||
integrity sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==
|
||||
dependencies:
|
||||
"@emotion/hash" "^0.9.0"
|
||||
"@emotion/memoize" "^0.8.0"
|
||||
"@emotion/unitless" "^0.8.0"
|
||||
"@emotion/utils" "^1.2.0"
|
||||
csstype "^3.0.2"
|
||||
|
||||
"@emotion/sheet@^1.2.1":
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.1.tgz#0767e0305230e894897cadb6c8df2c51e61a6c2c"
|
||||
integrity sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==
|
||||
|
||||
"@emotion/unitless@^0.8.0":
|
||||
version "0.8.0"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db"
|
||||
integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==
|
||||
|
||||
"@emotion/use-insertion-effect-with-fallbacks@^1.0.0":
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz#ffadaec35dbb7885bd54de3fa267ab2f860294df"
|
||||
integrity sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==
|
||||
|
||||
"@emotion/utils@^1.2.0":
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561"
|
||||
integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==
|
||||
|
||||
"@emotion/weak-memoize@^0.3.0":
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb"
|
||||
integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==
|
||||
|
||||
"@floating-ui/core@^1.0.4":
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.0.4.tgz#03066eaea8e9b2a2cd3f5aaa60f1e0f580ebe88e"
|
||||
integrity sha512-FPFLbg2b06MIw1dqk2SOEMAMX3xlrreGjcui5OTxfBDtaKTmh0kioOVjT8gcfl58juawL/yF+S+gnq8aUYQx/Q==
|
||||
|
||||
"@floating-ui/dom@^1.0.1":
|
||||
version "1.0.9"
|
||||
resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.0.9.tgz#3ae1d3e776bc90b9d33b1922f9498fb6f80f3b12"
|
||||
integrity sha512-nF9P6/BoARdt+h+CdUW3td4EUVngeDONCGuzRgnZveRZiJETx63cxhinE0JaPPC2tbcdTY9IGZocS5/7ag3xRg==
|
||||
dependencies:
|
||||
"@floating-ui/core" "^1.0.4"
|
||||
|
||||
"@popperjs/core@^2.11.5":
|
||||
version "2.11.6"
|
||||
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45"
|
||||
integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==
|
||||
|
||||
"@react-aria/ssr@^3.2.0":
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.4.0.tgz#a2b9a170214f56e41d3c4c933d0d8fcffa07a12a"
|
||||
integrity sha512-qzuGk14/fUyUAoW/EBwgFcuMkVNXJVGlezTgZ1HovpCZ+p9844E7MUFHE7CuzFzPEIkVeqhBNIoIu+VJJ8YCOA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.6.2"
|
||||
|
||||
"@restart/hooks@^0.4.6", "@restart/hooks@^0.4.7":
|
||||
version "0.4.7"
|
||||
resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.7.tgz#d79ca6472c01ce04389fc73d4a79af1b5e33cd39"
|
||||
integrity sha512-ZbjlEHcG+FQtpDPHd7i4FzNNvJf2enAwZfJbpM8CW7BhmOAbsHpZe3tsHwfQUrBuyrxWqPYp2x5UMnilWcY22A==
|
||||
dependencies:
|
||||
dequal "^2.0.2"
|
||||
|
||||
"@restart/ui@^1.4.1":
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.4.1.tgz#c9057915f0708c411824eeb16c03d0108c0208d2"
|
||||
integrity sha512-J7wFOx2DcmkBqCqiZgDsggLO7faiNh4Nv1/v80FmbRgP+MYpwaVDKKXLC69DA4+ejgNIsBP5ORtC74EZqO1j8A==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.18.3"
|
||||
"@popperjs/core" "^2.11.5"
|
||||
"@react-aria/ssr" "^3.2.0"
|
||||
"@restart/hooks" "^0.4.7"
|
||||
"@types/warning" "^3.0.0"
|
||||
dequal "^2.0.2"
|
||||
dom-helpers "^5.2.0"
|
||||
uncontrollable "^7.2.1"
|
||||
warning "^4.0.3"
|
||||
|
||||
"@rjsf/core@^5.0.0-beta.11":
|
||||
version "5.0.0-beta.13"
|
||||
resolved "https://registry.yarnpkg.com/@rjsf/core/-/core-5.0.0-beta.13.tgz#e13bd67a448460f5d9005033486b277f4eb35cf6"
|
||||
integrity sha512-uQ3A9aJhMJsz9ct5tV3ogZkSFEkKUxrM9SJ9Hc8ijxmuaW7Jv8tNv5jiWZZsLvNXlIONX83s6JqkiOJf6IOAvg==
|
||||
dependencies:
|
||||
lodash "^4.17.15"
|
||||
lodash-es "^4.17.15"
|
||||
nanoid "^3.3.4"
|
||||
prop-types "^15.7.2"
|
||||
|
||||
"@rjsf/utils@^5.0.0-beta.11":
|
||||
version "5.0.0-beta.13"
|
||||
resolved "https://registry.yarnpkg.com/@rjsf/utils/-/utils-5.0.0-beta.13.tgz#9a78efca6cee84bee4af83b4237cc618c6435f0a"
|
||||
integrity sha512-hWWWFD2ifjSOhqWueML4OHrZe2HW5pE2nfKGhCObFbwtggHoQlj64xDBsJ1qfUG8DGvCHztJQ/sKIaOvXnpt7w==
|
||||
dependencies:
|
||||
json-schema-merge-allof "^0.8.1"
|
||||
jsonpointer "^5.0.1"
|
||||
lodash "^4.17.15"
|
||||
lodash-es "^4.17.15"
|
||||
react-is "^18.2.0"
|
||||
|
||||
"@rjsf/validator-ajv6@^5.0.0-beta.11":
|
||||
version "5.0.0-beta.13"
|
||||
resolved "https://registry.yarnpkg.com/@rjsf/validator-ajv6/-/validator-ajv6-5.0.0-beta.13.tgz#2f9ec0519e1c6547e38cadcab56a22339836db2e"
|
||||
integrity sha512-X9N3/HJYV23MjUN/VJHIdBhUdBuMTUsh4HAZm50eUvUAhWK95wIqjjhAs24rzeLajrjFeH7kFr89zAqDgIFhVQ==
|
||||
dependencies:
|
||||
ajv "^6.7.0"
|
||||
lodash "^4.17.15"
|
||||
lodash-es "^4.17.15"
|
||||
|
||||
"@seznam/compose-react-refs@^1.0.6":
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/@seznam/compose-react-refs/-/compose-react-refs-1.0.6.tgz#6ec4e70bdd6e32f8e70b4100f27267cf306bd8df"
|
||||
integrity sha512-izzOXQfeQLonzrIQb8u6LQ8dk+ymz3WXTIXjvOlTXHq6sbzROg3NWU+9TTAOpEoK9Bth24/6F/XrfHJ5yR5n6Q==
|
||||
|
||||
"@types/lodash@^4.14.191":
|
||||
version "4.14.191"
|
||||
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa"
|
||||
integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==
|
||||
|
||||
"@types/parse-json@^4.0.0":
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
|
||||
integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
|
||||
|
||||
"@types/prop-types@*":
|
||||
version "15.7.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf"
|
||||
integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
|
||||
|
||||
"@types/react-transition-group@^4.4.0", "@types/react-transition-group@^4.4.4":
|
||||
version "4.4.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.5.tgz#aae20dcf773c5aa275d5b9f7cdbca638abc5e416"
|
||||
integrity sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==
|
||||
dependencies:
|
||||
"@types/react" "*"
|
||||
|
||||
"@types/react@*", "@types/react@>=16.9.11":
|
||||
version "18.0.26"
|
||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917"
|
||||
integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==
|
||||
dependencies:
|
||||
"@types/prop-types" "*"
|
||||
"@types/scheduler" "*"
|
||||
csstype "^3.0.2"
|
||||
|
||||
"@types/scheduler@*":
|
||||
version "0.16.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
|
||||
integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
|
||||
|
||||
"@types/warning@^3.0.0":
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52"
|
||||
integrity sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA==
|
||||
|
||||
ajv@^6.7.0:
|
||||
version "6.12.6"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
|
||||
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
|
||||
dependencies:
|
||||
fast-deep-equal "^3.1.1"
|
||||
fast-json-stable-stringify "^2.0.0"
|
||||
json-schema-traverse "^0.4.1"
|
||||
uri-js "^4.2.2"
|
||||
|
||||
ansi-styles@^3.2.1:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
||||
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
|
||||
dependencies:
|
||||
color-convert "^1.9.0"
|
||||
|
||||
asynckit@^0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
||||
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
|
||||
|
||||
axios@^0.27.2:
|
||||
version "0.27.2"
|
||||
resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972"
|
||||
integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==
|
||||
dependencies:
|
||||
follow-redirects "^1.14.9"
|
||||
form-data "^4.0.0"
|
||||
|
||||
babel-plugin-macros@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1"
|
||||
integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.12.5"
|
||||
cosmiconfig "^7.0.0"
|
||||
resolve "^1.19.0"
|
||||
|
||||
callsites@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
|
||||
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
|
||||
|
||||
chalk@^2.0.0:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
|
||||
dependencies:
|
||||
ansi-styles "^3.2.1"
|
||||
escape-string-regexp "^1.0.5"
|
||||
supports-color "^5.3.0"
|
||||
|
||||
classnames@^2.3.1:
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924"
|
||||
integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==
|
||||
|
||||
color-convert@^1.9.0:
|
||||
version "1.9.3"
|
||||
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
|
||||
integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
|
||||
dependencies:
|
||||
color-name "1.1.3"
|
||||
|
||||
color-name@1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
|
||||
integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
|
||||
|
||||
combined-stream@^1.0.8:
|
||||
version "1.0.8"
|
||||
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
|
||||
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
|
||||
dependencies:
|
||||
delayed-stream "~1.0.0"
|
||||
|
||||
compute-gcd@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/compute-gcd/-/compute-gcd-1.2.1.tgz#34d639f3825625e1357ce81f0e456a6249d8c77f"
|
||||
integrity sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==
|
||||
dependencies:
|
||||
validate.io-array "^1.0.3"
|
||||
validate.io-function "^1.0.2"
|
||||
validate.io-integer-array "^1.0.0"
|
||||
|
||||
compute-lcm@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/compute-lcm/-/compute-lcm-1.1.2.tgz#9107c66b9dca28cefb22b4ab4545caac4034af23"
|
||||
integrity sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==
|
||||
dependencies:
|
||||
compute-gcd "^1.2.1"
|
||||
validate.io-array "^1.0.3"
|
||||
validate.io-function "^1.0.2"
|
||||
validate.io-integer-array "^1.0.0"
|
||||
|
||||
convert-source-map@^1.5.0:
|
||||
version "1.9.0"
|
||||
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
|
||||
integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
|
||||
|
||||
cosmiconfig@^7.0.0:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6"
|
||||
integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==
|
||||
dependencies:
|
||||
"@types/parse-json" "^4.0.0"
|
||||
import-fresh "^3.2.1"
|
||||
parse-json "^5.0.0"
|
||||
path-type "^4.0.0"
|
||||
yaml "^1.10.0"
|
||||
|
||||
csstype@^3.0.2:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9"
|
||||
integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==
|
||||
|
||||
debounce-promise@^3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/debounce-promise/-/debounce-promise-3.1.2.tgz#320fb8c7d15a344455cd33cee5ab63530b6dc7c5"
|
||||
integrity sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg==
|
||||
|
||||
delayed-stream@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
||||
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
|
||||
|
||||
dequal@^2.0.2:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
|
||||
integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
|
||||
|
||||
dom-helpers@^5.0.1, dom-helpers@^5.2.0, dom-helpers@^5.2.1:
|
||||
version "5.2.1"
|
||||
resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
|
||||
integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.8.7"
|
||||
csstype "^3.0.2"
|
||||
|
||||
error-ex@^1.3.1:
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
|
||||
integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
|
||||
dependencies:
|
||||
is-arrayish "^0.2.1"
|
||||
|
||||
escape-string-regexp@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||
integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
|
||||
|
||||
escape-string-regexp@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
|
||||
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
|
||||
|
||||
eta@^1.12.3:
|
||||
version "1.12.3"
|
||||
resolved "https://registry.yarnpkg.com/eta/-/eta-1.12.3.tgz#2982d08adfbef39f9fa50e2fbd42d7337e7338b1"
|
||||
integrity sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==
|
||||
|
||||
fast-deep-equal@^3.1.1:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
|
||||
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
|
||||
|
||||
fast-json-stable-stringify@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
|
||||
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
|
||||
|
||||
find-root@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
|
||||
integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
|
||||
|
||||
follow-redirects@^1.14.9:
|
||||
version "1.15.2"
|
||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
|
||||
integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
|
||||
|
||||
form-data@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
|
||||
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
|
||||
dependencies:
|
||||
asynckit "^0.4.0"
|
||||
combined-stream "^1.0.8"
|
||||
mime-types "^2.1.12"
|
||||
|
||||
function-bind@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
||||
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
|
||||
|
||||
has-flag@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
||||
integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
|
||||
|
||||
has@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
|
||||
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
|
||||
dependencies:
|
||||
function-bind "^1.1.1"
|
||||
|
||||
hoist-non-react-statics@^3.3.1:
|
||||
version "3.3.2"
|
||||
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
|
||||
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
|
||||
dependencies:
|
||||
react-is "^16.7.0"
|
||||
|
||||
import-fresh@^3.2.1:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
|
||||
integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
|
||||
dependencies:
|
||||
parent-module "^1.0.0"
|
||||
resolve-from "^4.0.0"
|
||||
|
||||
invariant@^2.2.4:
|
||||
version "2.2.4"
|
||||
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
|
||||
integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
|
||||
dependencies:
|
||||
loose-envify "^1.0.0"
|
||||
|
||||
is-arrayish@^0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
|
||||
integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
|
||||
|
||||
is-core-module@^2.9.0:
|
||||
version "2.11.0"
|
||||
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144"
|
||||
integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==
|
||||
dependencies:
|
||||
has "^1.0.3"
|
||||
|
||||
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
||||
|
||||
json-parse-even-better-errors@^2.3.0:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
|
||||
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
|
||||
|
||||
json-schema-compare@^0.2.2:
|
||||
version "0.2.2"
|
||||
resolved "https://registry.yarnpkg.com/json-schema-compare/-/json-schema-compare-0.2.2.tgz#dd601508335a90c7f4cfadb6b2e397225c908e56"
|
||||
integrity sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==
|
||||
dependencies:
|
||||
lodash "^4.17.4"
|
||||
|
||||
json-schema-merge-allof@^0.8.1:
|
||||
version "0.8.1"
|
||||
resolved "https://registry.yarnpkg.com/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz#ed2828cdd958616ff74f932830a26291789eaaf2"
|
||||
integrity sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w==
|
||||
dependencies:
|
||||
compute-lcm "^1.1.2"
|
||||
json-schema-compare "^0.2.2"
|
||||
lodash "^4.17.20"
|
||||
|
||||
json-schema-traverse@^0.4.1:
|
||||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
|
||||
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
|
||||
|
||||
jsonpointer@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559"
|
||||
integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==
|
||||
|
||||
lines-and-columns@^1.1.6:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
|
||||
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
|
||||
|
||||
lodash-es@^4.17.15:
|
||||
version "4.17.21"
|
||||
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
|
||||
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
|
||||
|
||||
lodash.debounce@^4.0.8:
|
||||
version "4.0.8"
|
||||
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
|
||||
integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
|
||||
|
||||
lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4:
|
||||
version "4.17.21"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
||||
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
||||
|
||||
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
|
||||
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
|
||||
dependencies:
|
||||
js-tokens "^3.0.0 || ^4.0.0"
|
||||
|
||||
memoize-one@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045"
|
||||
integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
|
||||
|
||||
mime-db@1.52.0:
|
||||
version "1.52.0"
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
|
||||
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
|
||||
|
||||
mime-types@^2.1.12:
|
||||
version "2.1.35"
|
||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
|
||||
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
|
||||
dependencies:
|
||||
mime-db "1.52.0"
|
||||
|
||||
nanoid@^3.3.4:
|
||||
version "3.3.4"
|
||||
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
|
||||
integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
|
||||
|
||||
object-assign@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
|
||||
|
||||
parent-module@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
|
||||
integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
|
||||
dependencies:
|
||||
callsites "^3.0.0"
|
||||
|
||||
parse-json@^5.0.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
|
||||
integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.0.0"
|
||||
error-ex "^1.3.1"
|
||||
json-parse-even-better-errors "^2.3.0"
|
||||
lines-and-columns "^1.1.6"
|
||||
|
||||
path-parse@^1.0.7:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
|
||||
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
|
||||
|
||||
path-type@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
|
||||
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
|
||||
|
||||
prop-types-extra@^1.1.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.1.tgz#58c3b74cbfbb95d304625975aa2f0848329a010b"
|
||||
integrity sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==
|
||||
dependencies:
|
||||
react-is "^16.3.2"
|
||||
warning "^4.0.0"
|
||||
|
||||
prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1:
|
||||
version "15.8.1"
|
||||
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
|
||||
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
|
||||
dependencies:
|
||||
loose-envify "^1.4.0"
|
||||
object-assign "^4.1.1"
|
||||
react-is "^16.13.1"
|
||||
|
||||
punycode@^2.1.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
|
||||
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
|
||||
|
||||
react-bootstrap@^2.5.0:
|
||||
version "2.7.0"
|
||||
resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-2.7.0.tgz#4a8f0311bccac477dc925366763c536f46e4393b"
|
||||
integrity sha512-Jcrn6aUuRVBeSB6dzKODKZU1TONOdhAxu0IDm4Sv74SJUm98dMdhSotF2SNvFEADANoR+stV+7TK6SNX1wWu5w==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.17.2"
|
||||
"@restart/hooks" "^0.4.6"
|
||||
"@restart/ui" "^1.4.1"
|
||||
"@types/react-transition-group" "^4.4.4"
|
||||
classnames "^2.3.1"
|
||||
dom-helpers "^5.2.1"
|
||||
invariant "^2.2.4"
|
||||
prop-types "^15.8.1"
|
||||
prop-types-extra "^1.1.0"
|
||||
react-transition-group "^4.4.2"
|
||||
uncontrollable "^7.2.1"
|
||||
warning "^4.0.3"
|
||||
|
||||
react-dom@^18.2.0:
|
||||
version "18.2.0"
|
||||
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
|
||||
integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
|
||||
dependencies:
|
||||
loose-envify "^1.1.0"
|
||||
scheduler "^0.23.0"
|
||||
|
||||
react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0:
|
||||
version "16.13.1"
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
|
||||
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
||||
|
||||
react-is@^18.2.0:
|
||||
version "18.2.0"
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
|
||||
integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
|
||||
|
||||
react-lifecycles-compat@^3.0.4:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
|
||||
integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
|
||||
|
||||
react-select-async-paginate@^0.6.2:
|
||||
version "0.6.2"
|
||||
resolved "https://registry.yarnpkg.com/react-select-async-paginate/-/react-select-async-paginate-0.6.2.tgz#87ecb2d0e97d70b8904affc404c2a19d41079c27"
|
||||
integrity sha512-aSK6IONYCsDtP05cYQGk9mkBYwo6XOilr+pUxrLy1CUVOidBotx1+ThKK+PYagIOCL5k+yv9yOX6+7BSdxhYfg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.18.9"
|
||||
"@seznam/compose-react-refs" "^1.0.6"
|
||||
sleep-promise "^9.1.0"
|
||||
use-is-mounted-ref "^1.5.0"
|
||||
|
||||
react-select@^5.4.0:
|
||||
version "5.7.0"
|
||||
resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.7.0.tgz#82921b38f1fcf1471a0b62304da01f2896cd8ce6"
|
||||
integrity sha512-lJGiMxCa3cqnUr2Jjtg9YHsaytiZqeNOKeibv6WF5zbK/fPegZ1hg3y/9P1RZVLhqBTs0PfqQLKuAACednYGhQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.12.0"
|
||||
"@emotion/cache" "^11.4.0"
|
||||
"@emotion/react" "^11.8.1"
|
||||
"@floating-ui/dom" "^1.0.1"
|
||||
"@types/react-transition-group" "^4.4.0"
|
||||
memoize-one "^6.0.0"
|
||||
prop-types "^15.6.0"
|
||||
react-transition-group "^4.3.0"
|
||||
use-isomorphic-layout-effect "^1.1.2"
|
||||
|
||||
react-transition-group@^4.3.0, react-transition-group@^4.4.2:
|
||||
version "4.4.5"
|
||||
resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1"
|
||||
integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.5.5"
|
||||
dom-helpers "^5.0.1"
|
||||
loose-envify "^1.4.0"
|
||||
prop-types "^15.6.2"
|
||||
|
||||
react@^18.2.0:
|
||||
version "18.2.0"
|
||||
resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
|
||||
integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
|
||||
dependencies:
|
||||
loose-envify "^1.1.0"
|
||||
|
||||
reflect-metadata@^0.1.13:
|
||||
version "0.1.13"
|
||||
resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08"
|
||||
integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==
|
||||
|
||||
regenerator-runtime@^0.13.11:
|
||||
version "0.13.11"
|
||||
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
|
||||
integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
|
||||
|
||||
resolve-from@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
|
||||
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
|
||||
|
||||
resolve@^1.19.0:
|
||||
version "1.22.1"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
|
||||
integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
|
||||
dependencies:
|
||||
is-core-module "^2.9.0"
|
||||
path-parse "^1.0.7"
|
||||
supports-preserve-symlinks-flag "^1.0.0"
|
||||
|
||||
rxjs@^7.5.6:
|
||||
version "7.6.0"
|
||||
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.6.0.tgz#361da5362b6ddaa691a2de0b4f2d32028f1eb5a2"
|
||||
integrity sha512-DDa7d8TFNUalGC9VqXvQ1euWNN7sc63TrUCuM9J998+ViviahMIjKSOU7rfcgFOF+FCD71BhDRv4hrFz+ImDLQ==
|
||||
dependencies:
|
||||
tslib "^2.1.0"
|
||||
|
||||
scheduler@^0.23.0:
|
||||
version "0.23.0"
|
||||
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
|
||||
integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
|
||||
dependencies:
|
||||
loose-envify "^1.1.0"
|
||||
|
||||
sleep-promise@^9.1.0:
|
||||
version "9.1.0"
|
||||
resolved "https://registry.yarnpkg.com/sleep-promise/-/sleep-promise-9.1.0.tgz#101ebe65700bcd184709da95d960967b02b79d03"
|
||||
integrity sha512-UHYzVpz9Xn8b+jikYSD6bqvf754xL2uBUzDFwiU6NcdZeifPr6UfgU43xpkPu67VMS88+TI2PSI7Eohgqf2fKA==
|
||||
|
||||
source-map@^0.5.7:
|
||||
version "0.5.7"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
|
||||
integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
|
||||
|
||||
stylis@4.1.3:
|
||||
version "4.1.3"
|
||||
resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7"
|
||||
integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==
|
||||
|
||||
supports-color@^5.3.0:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
||||
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
|
||||
dependencies:
|
||||
has-flag "^3.0.0"
|
||||
|
||||
supports-preserve-symlinks-flag@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
|
||||
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
|
||||
|
||||
to-fast-properties@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
|
||||
integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
|
||||
|
||||
tslib@^1.9.3:
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
|
||||
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
|
||||
|
||||
tslib@^2.1.0:
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e"
|
||||
integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==
|
||||
|
||||
tsyringe@^4.7.0:
|
||||
version "4.7.0"
|
||||
resolved "https://registry.yarnpkg.com/tsyringe/-/tsyringe-4.7.0.tgz#aea0a9d565385deebb6def60cda342b15016f283"
|
||||
integrity sha512-ncFDM1jTLsok4ejMvSW5jN1VGPQD48y2tfAR0pdptWRKYX4bkbqPt92k7KJ5RFJ1KV36JEs/+TMh7I6OUgj74g==
|
||||
dependencies:
|
||||
tslib "^1.9.3"
|
||||
|
||||
uncontrollable@^7.2.1:
|
||||
version "7.2.1"
|
||||
resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.2.1.tgz#1fa70ba0c57a14d5f78905d533cf63916dc75738"
|
||||
integrity sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.6.3"
|
||||
"@types/react" ">=16.9.11"
|
||||
invariant "^2.2.4"
|
||||
react-lifecycles-compat "^3.0.4"
|
||||
|
||||
uri-js@^4.2.2:
|
||||
version "4.4.1"
|
||||
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
|
||||
integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
|
||||
dependencies:
|
||||
punycode "^2.1.0"
|
||||
|
||||
use-debounce@^9.0.2:
|
||||
version "9.0.2"
|
||||
resolved "https://registry.yarnpkg.com/use-debounce/-/use-debounce-9.0.2.tgz#2883982ec1eb79affec46f14047244057b78161c"
|
||||
integrity sha512-QLyB0sxt9F5AisGDrUybCRJSLE60bTQR0yXc+IebNGUu1GCXwii1zsZl82mPGdWqDVQy7+1FKMLHQUixxf5Nbw==
|
||||
|
||||
use-is-mounted-ref@^1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/use-is-mounted-ref/-/use-is-mounted-ref-1.5.0.tgz#d737e7b30f1bbbaca594f21cdd2621dc52ae8180"
|
||||
integrity sha512-p5FksHf/ospZUr5KU9ese6u3jp9fzvZ3wuSb50i0y6fdONaHWgmOqQtxR/PUcwi6hnhQDbNxWSg3eTK3N6m+dg==
|
||||
|
||||
use-isomorphic-layout-effect@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb"
|
||||
integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==
|
||||
|
||||
use-sync-external-store@1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a"
|
||||
integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==
|
||||
|
||||
uuid@^8.3.2:
|
||||
version "8.3.2"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
|
||||
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
|
||||
|
||||
validate.io-array@^1.0.3:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d"
|
||||
integrity sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==
|
||||
|
||||
validate.io-function@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/validate.io-function/-/validate.io-function-1.0.2.tgz#343a19802ed3b1968269c780e558e93411c0bad7"
|
||||
integrity sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==
|
||||
|
||||
validate.io-integer-array@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz#2cabde033293a6bcbe063feafe91eaf46b13a089"
|
||||
integrity sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==
|
||||
dependencies:
|
||||
validate.io-array "^1.0.3"
|
||||
validate.io-integer "^1.0.4"
|
||||
|
||||
validate.io-integer@^1.0.4:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/validate.io-integer/-/validate.io-integer-1.0.5.tgz#168496480b95be2247ec443f2233de4f89878068"
|
||||
integrity sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==
|
||||
dependencies:
|
||||
validate.io-number "^1.0.3"
|
||||
|
||||
validate.io-number@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/validate.io-number/-/validate.io-number-1.0.3.tgz#f63ffeda248bf28a67a8d48e0e3b461a1665baf8"
|
||||
integrity sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==
|
||||
|
||||
warning@^4.0.0, warning@^4.0.3:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
|
||||
integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
|
||||
dependencies:
|
||||
loose-envify "^1.0.0"
|
||||
|
||||
yaml@^1.10.0:
|
||||
version "1.10.2"
|
||||
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
|
||||
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
|
||||
|
||||
zustand@^4.1.1:
|
||||
version "4.1.5"
|
||||
resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.1.5.tgz#7402b511f5b23ccb0f9ba6d20ae01ec817e16eb6"
|
||||
integrity sha512-PsdRT8Bvq22Yyh1tvpgdHNE7OAeFKqJXUxtJvj1Ixw2B9O2YZ1M34ImQ+xyZah4wZrR4lENMoDUutKPpyXCQ/Q==
|
||||
dependencies:
|
||||
use-sync-external-store "1.2.0"
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,45 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace Plugin\System\PSC\PaypalPlus\Payment;
|
||||
|
||||
use Doctrine\Bundle\MongoDBBundle\ManagerRegistry;
|
||||
use Doctrine\ODM\MongoDB\DocumentManager;
|
||||
use Doctrine\ORM\EntityManager;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use PayPalCheckoutSdk\Core\PayPalHttpClient;
|
||||
use PayPalCheckoutSdk\Core\ProductionEnvironment;
|
||||
use PayPalCheckoutSdk\Core\SandboxEnvironment;
|
||||
use Plugin\System\PSC\PaypalPlus\Document\Paypal;
|
||||
use Plugin\System\PSC\PaypalPlus\Paypal\CreateDoPayRequest;
|
||||
use Plugin\System\PSC\PaypalPlus\Paypal\CreateOrderRequest;
|
||||
use Plugin\System\PSC\PaypalPlus\Paypal\CreatePaymentRequest;
|
||||
use Plugin\System\PSC\PaypalPlus\Paypal\CreateProfileRequest;
|
||||
use PSC\Shop\EntityBundle\Document\Order;
|
||||
use PSC\Shop\EntityBundle\Entity\Contact;
|
||||
use PSC\Shop\EntityBundle\Entity\ContactAddress;
|
||||
use PSC\Shop\EntityBundle\Entity\Shop;
|
||||
use PSC\Shop\MediaBundle\Document\Media;
|
||||
use PSC\Shop\MediaBundle\Form\Type\MediaType;
|
||||
use PSC\Shop\PaymentBundle\Document\Gatewaysettings;
|
||||
use PSC\Shop\PaymentBundle\Provider\PaymentProvider;
|
||||
use PSC\Shop\PaymentBundle\Provider\PaymentProviderInterface;
|
||||
use PSC\Shop\QueueBundle\Event\Order\Payed;
|
||||
use PSC\Shop\QueueBundle\Service\Event\Manager;
|
||||
use Sofort\SofortLib\Notification;
|
||||
use Sofort\SofortLib\TransactionData;
|
||||
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\Form;
|
||||
use Symfony\Component\Form\FormBuilder;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Form\FormFactory;
|
||||
use Symfony\Component\Form\FormFactoryInterface;
|
||||
use Symfony\Component\HttpFoundation\RedirectResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\RequestStack;
|
||||
use Symfony\Component\HttpFoundation\Session\SessionInterface;
|
||||
use Symfony\Component\HttpFoundation\StreamedResponse;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
|
||||
class Provider extends PaymentProvider
|
||||
{
|
||||
@ -59,7 +44,7 @@ class Provider extends PaymentProvider
|
||||
*/
|
||||
private SessionInterface $session;
|
||||
|
||||
function __construct(RequestStack $requestStack, Manager $eventManager, FormFactoryInterface $formFactory, EntityManagerInterface $entityManager, DocumentManager $doctrine_mongodb, \PSC\System\SettingsBundle\Service\Shop $shopService)
|
||||
public function __construct(RequestStack $requestStack, Manager $eventManager, FormFactoryInterface $formFactory, EntityManagerInterface $entityManager, DocumentManager $doctrine_mongodb, \PSC\System\SettingsBundle\Service\Shop $shopService)
|
||||
{
|
||||
$this->_formFactory = $formFactory;
|
||||
$this->_entityManager = $entityManager;
|
||||
@ -96,7 +81,7 @@ class Provider extends PaymentProvider
|
||||
public function getSubForm(Gatewaysettings $settings, FormBuilder $builder)
|
||||
{
|
||||
|
||||
if(!$settings->getGatewayDocument()) {
|
||||
if (!$settings->getGatewayDocument()) {
|
||||
$settings->setGatewayDocument(new Paypal());
|
||||
}
|
||||
|
||||
@ -122,14 +107,16 @@ class Provider extends PaymentProvider
|
||||
public function handlePayment(Request $request)
|
||||
{
|
||||
|
||||
if($this->getGatewaySettings()->getGatewayDocument()->isProduction()) {
|
||||
if ($this->getGatewaySettings()->getGatewayDocument()->isProduction()) {
|
||||
$environment = new ProductionEnvironment(
|
||||
$this->getGatewaySettings()->getGatewayDocument()->getClientId(),
|
||||
$this->getGatewaySettings()->getGatewayDocument()->getClientSecret());
|
||||
}else{
|
||||
$this->getGatewaySettings()->getGatewayDocument()->getClientSecret()
|
||||
);
|
||||
} else {
|
||||
$environment = new SandboxEnvironment(
|
||||
$this->getGatewaySettings()->getGatewayDocument()->getClientId(),
|
||||
$this->getGatewaySettings()->getGatewayDocument()->getClientSecret());
|
||||
$this->getGatewaySettings()->getGatewayDocument()->getClientSecret()
|
||||
);
|
||||
}
|
||||
|
||||
$client = new PayPalHttpClient($environment);
|
||||
@ -159,14 +146,14 @@ class Provider extends PaymentProvider
|
||||
|
||||
$this->session->set('plugin_system_psc_paypalplus_paymentId', $response->result->id);
|
||||
$this->session->set('plugin_system_psc_paypalplus_production', $this->getGatewaySettings()->getGatewayDocument()->isProduction());
|
||||
foreach($response->result->links as $link) {
|
||||
if($link->rel == 'approval_url') {
|
||||
foreach ($response->result->links as $link) {
|
||||
if ($link->rel == 'approval_url') {
|
||||
$this->session->set('plugin_system_psc_paypalplus_link', $link->href);
|
||||
}
|
||||
}
|
||||
|
||||
return new RedirectResponse('/apps/payment/paypalplus/pay/wall');
|
||||
}catch (\Exception $e) {
|
||||
} catch (\Exception $e) {
|
||||
var_dump($e->getMessage());
|
||||
}
|
||||
die();
|
||||
@ -178,12 +165,13 @@ class Provider extends PaymentProvider
|
||||
$request = $request->getContent();
|
||||
$request = json_decode($request, true);
|
||||
|
||||
if(isset($request['resource']) && isset($request['resource']['state']) && $request['resource']['state'] == 'completed')
|
||||
if (isset($request['resource']) && isset($request['resource']['state']) && $request['resource']['state'] == 'completed') {
|
||||
|
||||
/** @var \PSC\Shop\EntityBundle\Document\Order $orderDoc */
|
||||
$orderDoc = $this->_doctrine_mongodb
|
||||
->getRepository('PSC\Shop\EntityBundle\Document\Order')
|
||||
->findOneBy(array('paymentRef' => (string)$request['resource']['parent_payment']));
|
||||
}
|
||||
|
||||
/** @var \PSC\Shop\EntityBundle\Entity\Order $order */
|
||||
$order = $this->_entityManager
|
||||
@ -204,14 +192,16 @@ class Provider extends PaymentProvider
|
||||
|
||||
public function doPayment(Request $request)
|
||||
{
|
||||
if($this->getGatewaySettings()->getGatewayDocument()->isProduction()) {
|
||||
if ($this->getGatewaySettings()->getGatewayDocument()->isProduction()) {
|
||||
$environment = new ProductionEnvironment(
|
||||
$this->getGatewaySettings()->getGatewayDocument()->getClientId(),
|
||||
$this->getGatewaySettings()->getGatewayDocument()->getClientSecret());
|
||||
}else{
|
||||
$this->getGatewaySettings()->getGatewayDocument()->getClientSecret()
|
||||
);
|
||||
} else {
|
||||
$environment = new SandboxEnvironment(
|
||||
$this->getGatewaySettings()->getGatewayDocument()->getClientId(),
|
||||
$this->getGatewaySettings()->getGatewayDocument()->getClientSecret());
|
||||
$this->getGatewaySettings()->getGatewayDocument()->getClientSecret()
|
||||
);
|
||||
}
|
||||
|
||||
$client = new PayPalHttpClient($environment);
|
||||
@ -221,10 +211,10 @@ class Provider extends PaymentProvider
|
||||
|
||||
$response = $client->execute($requestPaypal);
|
||||
|
||||
if($response->statusCode == 200) {
|
||||
if ($response->statusCode == 200) {
|
||||
return new RedirectResponse($this->getHost().'/basket/finish?token='.$request->get('hash').'&paymentRef='.$response->result->id);
|
||||
}
|
||||
|
||||
return new RedirectResponse($this->getHost().'/basket/finish?error=DoPayment');
|
||||
return new RedirectResponse($this->getHost().'/basket/finish?error=DoPayment');
|
||||
}
|
||||
}
|
||||
@ -52,11 +52,13 @@ class Position implements IPositionTransformer
|
||||
$obj->setParams($posDoc->getSpecialProductTypeObject()['params']);
|
||||
} else {
|
||||
$objPosition = unserialize($posEntity->getData());
|
||||
$engine->setVariables($objPosition->getOptions());
|
||||
if (isset($objPosition->getOptions()['kalk_artikel'])) {
|
||||
$engine->setActiveArticle($objPosition->getOptions()['kalk_artikel']);
|
||||
if ($objPosition) {
|
||||
$engine->setVariables($objPosition->getOptions());
|
||||
if (isset($objPosition->getOptions()['kalk_artikel'])) {
|
||||
$engine->setActiveArticle($objPosition->getOptions()['kalk_artikel']);
|
||||
}
|
||||
$obj->setParams($objPosition->getOptions());
|
||||
}
|
||||
$obj->setParams($objPosition->getOptions());
|
||||
}
|
||||
|
||||
$articleCalc = $engine->getArticle();
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,23 +1,22 @@
|
||||
"use strict";
|
||||
(self["webpackChunk"] = self["webpackChunk"] || []).push([["backend/login"],{
|
||||
|
||||
/***/ "./assets/backend/login.ts":
|
||||
/*!*********************************!*\
|
||||
!*** ./assets/backend/login.ts ***!
|
||||
\*********************************/
|
||||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||||
/***/ "./assets/backend/login/login.ts":
|
||||
/*!***************************************!*\
|
||||
!*** ./assets/backend/login/login.ts ***!
|
||||
\***************************************/
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony import */ var _css_login_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./css/login.css */ "./assets/backend/login/css/login.css");
|
||||
|
||||
|
||||
exports.__esModule = true;
|
||||
__webpack_require__(/*! ./login/login.css */ "./assets/backend/login/login.css");
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "./assets/backend/login/login.css":
|
||||
/*!****************************************!*\
|
||||
!*** ./assets/backend/login/login.css ***!
|
||||
\****************************************/
|
||||
/***/ "./assets/backend/login/css/login.css":
|
||||
/*!********************************************!*\
|
||||
!*** ./assets/backend/login/css/login.css ***!
|
||||
\********************************************/
|
||||
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
@ -29,7 +28,7 @@ __webpack_require__.r(__webpack_exports__);
|
||||
},
|
||||
/******/ __webpack_require__ => { // webpackRuntimeModules
|
||||
/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
|
||||
/******/ var __webpack_exports__ = (__webpack_exec__("./assets/backend/login.ts"));
|
||||
/******/ var __webpack_exports__ = (__webpack_exec__("./assets/backend/login/login.ts"));
|
||||
/******/ }
|
||||
]);
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC9sb2dpbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBYTs7QUFDYkEsa0JBQWtCLEdBQUcsSUFBSTtBQUN6QkUsbUJBQU8sQ0FBQywyREFBbUIsQ0FBQzs7Ozs7Ozs7Ozs7QUNGNUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9sb2dpbi50cyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9sb2dpbi9sb2dpbi5jc3M/MDZmMSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiLi9sb2dpbi9sb2dpbi5jc3NcIik7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiXSwibmFtZXMiOlsiZXhwb3J0cyIsIl9fZXNNb2R1bGUiLCJyZXF1aXJlIl0sInNvdXJjZVJvb3QiOiIifQ==
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC9sb2dpbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9sb2dpbi9sb2dpbi50cyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvYmFja2VuZC9sb2dpbi9jc3MvbG9naW4uY3NzPzdhMmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwiLi9jc3MvbG9naW4uY3NzXCI7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=
|
||||
@ -12,24 +12,28 @@
|
||||
"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/vendors-node_modules_symfony_stimulus-bridge_dist_index_js-node_modules_core-js_modules_es_ar-8b4fee.js",
|
||||
"/apps/build/vendors-node_modules_popperjs_core_dist_cjs_popper_js-node_modules_bootstrap-toggle_js_bootst-2e5edb.js",
|
||||
"/apps/build/node_modules_symfony_stimulus-bridge_dist_webpack_loader_js_assets_controllers_json.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/vendors-node_modules_symfony_stimulus-bridge_dist_index_js-node_modules_core-js_modules_es_ar-8b4fee.css",
|
||||
"/apps/build/vendors-node_modules_popperjs_core_dist_cjs_popper_js-node_modules_bootstrap-toggle_js_bootst-2e5edb.css",
|
||||
"/apps/build/backend/dashboard.css"
|
||||
]
|
||||
},
|
||||
"plugins/system/psc/invoice": {
|
||||
"backend/tailwind": {
|
||||
"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-var_plugins_System_PSC_Invoice_Webpack_node_modules_ebay_nice-modal-react_lib_esm_ind-73e7df.js",
|
||||
"/apps/build/plugins/system/psc/invoice.js"
|
||||
"/apps/build/vendors-node_modules_symfony_stimulus-bridge_dist_index_js-node_modules_core-js_modules_es_ar-8b4fee.js",
|
||||
"/apps/build/vendors-node_modules_alpinejs_persist_dist_module_esm_js-node_modules_alpinejs_dist_module_esm_js.js",
|
||||
"/apps/build/node_modules_symfony_stimulus-bridge_dist_webpack_loader_js_assets_controllers_json.js",
|
||||
"/apps/build/backend/tailwind.js"
|
||||
],
|
||||
"css": [
|
||||
"/apps/build/plugins/system/psc/invoice.css"
|
||||
"/apps/build/vendors-node_modules_symfony_stimulus-bridge_dist_index_js-node_modules_core-js_modules_es_ar-8b4fee.css",
|
||||
"/apps/build/backend/tailwind.css"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,13 +3,15 @@
|
||||
"/apps/backend/login.js": "/apps/build/backend/login.js",
|
||||
"/apps/backend/dashboard.css": "/apps/build/backend/dashboard.css",
|
||||
"/apps/backend/dashboard.js": "/apps/build/backend/dashboard.js",
|
||||
"/apps/plugins/system/psc/invoice.css": "/apps/build/plugins/system/psc/invoice.css",
|
||||
"/apps/plugins/system/psc/invoice.js": "/apps/build/plugins/system/psc/invoice.js",
|
||||
"/apps/backend/tailwind.css": "/apps/build/backend/tailwind.css",
|
||||
"/apps/backend/tailwind.js": "/apps/build/backend/tailwind.js",
|
||||
"/apps/runtime.js": "/apps/build/runtime.js",
|
||||
"/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/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/vendors-node_modules_symfony_stimulus-bridge_dist_index_js-node_modules_core-js_modules_es_ar-8b4fee.css": "/apps/build/vendors-node_modules_symfony_stimulus-bridge_dist_index_js-node_modules_core-js_modules_es_ar-8b4fee.css",
|
||||
"/apps/vendors-node_modules_symfony_stimulus-bridge_dist_index_js-node_modules_core-js_modules_es_ar-8b4fee.js": "/apps/build/vendors-node_modules_symfony_stimulus-bridge_dist_index_js-node_modules_core-js_modules_es_ar-8b4fee.js",
|
||||
"/apps/vendors-node_modules_popperjs_core_dist_cjs_popper_js-node_modules_bootstrap-toggle_js_bootst-2e5edb.css": "/apps/build/vendors-node_modules_popperjs_core_dist_cjs_popper_js-node_modules_bootstrap-toggle_js_bootst-2e5edb.css",
|
||||
"/apps/vendors-node_modules_popperjs_core_dist_cjs_popper_js-node_modules_bootstrap-toggle_js_bootst-2e5edb.js": "/apps/build/vendors-node_modules_popperjs_core_dist_cjs_popper_js-node_modules_bootstrap-toggle_js_bootst-2e5edb.js",
|
||||
"/apps/vendors-node_modules_alpinejs_persist_dist_module_esm_js-node_modules_alpinejs_dist_module_esm_js.js": "/apps/build/vendors-node_modules_alpinejs_persist_dist_module_esm_js-node_modules_alpinejs_dist_module_esm_js.js",
|
||||
"/apps/node_modules_symfony_stimulus-bridge_dist_webpack_loader_js_assets_controllers_json.js": "/apps/build/node_modules_symfony_stimulus-bridge_dist_webpack_loader_js_assets_controllers_json.js",
|
||||
"/apps/fonts/summernote.eot": "/apps/build/fonts/summernote.7a3f9776.eot",
|
||||
"/apps/fonts/summernote.ttf": "/apps/build/fonts/summernote.eb23b6b7.ttf",
|
||||
"/apps/fonts/summernote.woff": "/apps/build/fonts/summernote.f2bec4f2.woff",
|
||||
|
||||
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
@ -1,22 +1,18 @@
|
||||
var Encore = require('@symfony/webpack-encore');
|
||||
const glob = require('glob');
|
||||
// Manually configure the runtime environment if not already configured yet by the "encore" command.
|
||||
// It's useful when you use tools that rely on webpack.config.js file.
|
||||
if (!Encore.isRuntimeEnvironmentConfigured()) {
|
||||
Encore.configureRuntimeEnvironment(process.env.NODE_ENV || 'dev');
|
||||
}
|
||||
|
||||
function getEntries (){
|
||||
return glob.sync("./var/plugins/System/**/*/Webpack/index.{js,ts}");
|
||||
}
|
||||
|
||||
Encore
|
||||
.setOutputPath('web/build/')
|
||||
.setPublicPath('/apps/build')
|
||||
.setManifestKeyPrefix('/apps')
|
||||
|
||||
.addEntry('backend/login', './assets/backend/login.ts')
|
||||
.addEntry('backend/login', './assets/backend/login/login.ts')
|
||||
.addEntry('backend/dashboard', './assets/backend/dashboard/dashboard.js')
|
||||
.addEntry('backend/tailwind', './assets/tailwind/backend.ts')
|
||||
.copyFiles({
|
||||
from: './assets/images',
|
||||
to: 'images/[path][name].[ext]',
|
||||
@ -43,11 +39,6 @@ Encore
|
||||
jQuery: 'jquery'
|
||||
})
|
||||
;
|
||||
for (const entry of getEntries()) {
|
||||
const splEntry = entry.split('/');
|
||||
Encore.addEntry('plugins/' + splEntry[3].toLowerCase() + '/' + splEntry[4].toLowerCase() + '/' + splEntry[5].toLowerCase(), entry);
|
||||
}
|
||||
|
||||
let config = Encore.getWebpackConfig();
|
||||
module.exports = config;
|
||||
|
||||
|
||||
@ -7,6 +7,11 @@
|
||||
resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz"
|
||||
integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
|
||||
|
||||
"@alpinejs/persist@^3.14.7":
|
||||
version "3.14.7"
|
||||
resolved "https://registry.npmjs.org/@alpinejs/persist/-/persist-3.14.7.tgz"
|
||||
integrity sha512-MakPAI87flMcJro2LJEbq0wcpwgQMGxK9fx1hVaSC0jLinoUfKkoK4DzF6YJmqLVWKnca5ryO3Av1sWzPftQwQ==
|
||||
|
||||
"@ampproject/remapping@^2.1.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz"
|
||||
@ -1287,6 +1292,11 @@
|
||||
resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz"
|
||||
integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==
|
||||
|
||||
"@types/alpinejs@^3.13.11":
|
||||
version "3.13.11"
|
||||
resolved "https://registry.npmjs.org/@types/alpinejs/-/alpinejs-3.13.11.tgz"
|
||||
integrity sha512-3KhGkDixCPiLdL3Z/ok1GxHwLxEWqQOKJccgaQL01wc0EVM2tCTaqlC3NIedmxAXkVzt/V6VTM8qPgnOHKJ1MA==
|
||||
|
||||
"@types/aria-query@^4.2.0":
|
||||
version "4.2.2"
|
||||
resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz"
|
||||
@ -1546,6 +1556,18 @@
|
||||
loupe "^2.3.7"
|
||||
pretty-format "^29.7.0"
|
||||
|
||||
"@vue/reactivity@~3.1.1":
|
||||
version "3.1.5"
|
||||
resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz"
|
||||
integrity sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==
|
||||
dependencies:
|
||||
"@vue/shared" "3.1.5"
|
||||
|
||||
"@vue/shared@3.1.5":
|
||||
version "3.1.5"
|
||||
resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz"
|
||||
integrity sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==
|
||||
|
||||
"@webassemblyjs/ast@1.11.1":
|
||||
version "1.11.1"
|
||||
resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz"
|
||||
@ -1772,6 +1794,13 @@ ajv@^8.8.0, ajv@^8.8.2:
|
||||
require-from-string "^2.0.2"
|
||||
uri-js "^4.2.2"
|
||||
|
||||
alpinejs@^3.14.7:
|
||||
version "3.14.7"
|
||||
resolved "https://registry.npmjs.org/alpinejs/-/alpinejs-3.14.7.tgz"
|
||||
integrity sha512-ScnbydNBcWVnCiVupD3wWUvoMPm8244xkvDNMxVCspgmap9m4QuJ7pjc+77UtByU+1+Ejg0wzYkP4mQaOMcvng==
|
||||
dependencies:
|
||||
"@vue/reactivity" "~3.1.1"
|
||||
|
||||
ansi-html-community@^0.0.8:
|
||||
version "0.0.8"
|
||||
resolved "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user