@star-insure/sdk 3.1.0 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/index.d.ts +1 -0
- package/dist/sdk.cjs.development.js +724 -0
- package/dist/sdk.cjs.development.js.map +1 -1
- package/dist/sdk.cjs.production.min.js +1 -1
- package/dist/sdk.cjs.production.min.js.map +1 -1
- package/dist/sdk.esm.js +727 -4
- package/dist/sdk.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/components/filter/FilterItem.tsx +1 -1
- package/src/components/index.ts +1 -0
package/dist/sdk.esm.js
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import { parse, format } from 'date-fns';
|
|
2
|
-
import { usePage, useForm, Link } from '@inertiajs/react';
|
|
1
|
+
import { parse, format, subYears } from 'date-fns';
|
|
2
|
+
import { usePage as usePage$1, useForm, Link, router } from '@inertiajs/react';
|
|
3
3
|
import React__default, { useEffect, useContext, createContext, useState, createElement, Fragment } from 'react';
|
|
4
4
|
import { v4 } from 'uuid';
|
|
5
5
|
import { Transition, Dialog } from '@headlessui/react';
|
|
6
6
|
import cn from 'classnames';
|
|
7
7
|
import { padStart } from 'lodash-es';
|
|
8
|
+
import { HiArrowLeft, HiMagnifyingGlass, HiXMark, HiChevronDown, HiChevronLeft, HiChevronRight } from 'react-icons/hi2';
|
|
9
|
+
import Select from 'react-select';
|
|
10
|
+
import { createHost, createSlot } from 'create-slots';
|
|
11
|
+
import { router as router$1 } from '@inertiajs/core';
|
|
8
12
|
|
|
9
13
|
function parseDate(dateString) {
|
|
10
14
|
// Make sure we've only got 10 characters
|
|
@@ -572,7 +576,7 @@ function _objectWithoutPropertiesLoose(source, excluded) {
|
|
|
572
576
|
}
|
|
573
577
|
|
|
574
578
|
function useAuth() {
|
|
575
|
-
var _usePage = usePage(),
|
|
579
|
+
var _usePage = usePage$1(),
|
|
576
580
|
props = _usePage.props;
|
|
577
581
|
/**
|
|
578
582
|
* Check if the user has permission to perform the given ability.
|
|
@@ -2219,5 +2223,724 @@ function ErrorList(_ref) {
|
|
|
2219
2223
|
}))));
|
|
2220
2224
|
}
|
|
2221
2225
|
|
|
2222
|
-
|
|
2226
|
+
/**
|
|
2227
|
+
* A wrapper around Inertia's usePage function that gives better type-safety
|
|
2228
|
+
*/
|
|
2229
|
+
|
|
2230
|
+
function usePage() {
|
|
2231
|
+
// @ts-ignore
|
|
2232
|
+
return usePage$1();
|
|
2233
|
+
}
|
|
2234
|
+
|
|
2235
|
+
function BackButton(_ref) {
|
|
2236
|
+
var back = _ref.back;
|
|
2237
|
+
|
|
2238
|
+
var _React$useState = React__default.useState(typeof back === 'string' ? back : undefined),
|
|
2239
|
+
backUrl = _React$useState[0],
|
|
2240
|
+
setBackUrl = _React$useState[1];
|
|
2241
|
+
|
|
2242
|
+
var breadcrumbs = usePage().props.breadcrumbs;
|
|
2243
|
+
/**
|
|
2244
|
+
* Set the back URL on mount
|
|
2245
|
+
*/
|
|
2246
|
+
|
|
2247
|
+
React__default.useEffect(function () {
|
|
2248
|
+
if (typeof window !== 'undefined') {
|
|
2249
|
+
// Set back button URL
|
|
2250
|
+
if (back && typeof back === 'boolean') {
|
|
2251
|
+
// If we haven't provided a path as a prop, use the last breadcrumb that's not the current one
|
|
2252
|
+
var crumb = breadcrumbs.slice(breadcrumbs.length - 2, breadcrumbs.length - 1);
|
|
2253
|
+
|
|
2254
|
+
if (crumb && crumb.length === 1) {
|
|
2255
|
+
// Strip off everything but the path so the <Link> component works
|
|
2256
|
+
var url = crumb[0].url;
|
|
2257
|
+
|
|
2258
|
+
if (url) {
|
|
2259
|
+
setBackUrl(new URL(url).pathname);
|
|
2260
|
+
}
|
|
2261
|
+
}
|
|
2262
|
+
}
|
|
2263
|
+
}
|
|
2264
|
+
}, [breadcrumbs]);
|
|
2265
|
+
return React__default.createElement(Link, {
|
|
2266
|
+
href: backUrl || '/',
|
|
2267
|
+
className: "hover:text-teal transition-all p-1 -mr-1"
|
|
2268
|
+
}, React__default.createElement(HiArrowLeft, {
|
|
2269
|
+
className: "h-5 w-5 stroke-[1.25]"
|
|
2270
|
+
}));
|
|
2271
|
+
}
|
|
2272
|
+
|
|
2273
|
+
function SearchBar(_ref) {
|
|
2274
|
+
var search = _ref.search,
|
|
2275
|
+
active = _ref.active,
|
|
2276
|
+
onActive = _ref.onActive,
|
|
2277
|
+
placeholder = _ref.placeholder;
|
|
2278
|
+
|
|
2279
|
+
var _React$useState = React__default.useState(''),
|
|
2280
|
+
query = _React$useState[0],
|
|
2281
|
+
setQuery = _React$useState[1];
|
|
2282
|
+
|
|
2283
|
+
var searchRef = React__default.useRef(null);
|
|
2284
|
+
/**
|
|
2285
|
+
* Populate search input on load
|
|
2286
|
+
*/
|
|
2287
|
+
|
|
2288
|
+
React__default.useEffect(function () {
|
|
2289
|
+
if (typeof window !== 'undefined') {
|
|
2290
|
+
// Populate search
|
|
2291
|
+
var _search = new URLSearchParams(window.location.search);
|
|
2292
|
+
|
|
2293
|
+
var q = _search.get('search');
|
|
2294
|
+
|
|
2295
|
+
if (q) {
|
|
2296
|
+
setQuery(q);
|
|
2297
|
+
onActive(true);
|
|
2298
|
+
}
|
|
2299
|
+
}
|
|
2300
|
+
}, []);
|
|
2301
|
+
/**
|
|
2302
|
+
* Minimise the search bar on click outside if there's no search query
|
|
2303
|
+
*/
|
|
2304
|
+
|
|
2305
|
+
useClickOutside(searchRef, function () {
|
|
2306
|
+
if (!query) {
|
|
2307
|
+
onActive(false);
|
|
2308
|
+
}
|
|
2309
|
+
});
|
|
2310
|
+
/**
|
|
2311
|
+
* Handle the search function
|
|
2312
|
+
*/
|
|
2313
|
+
|
|
2314
|
+
function handleSearch(e, queryOverride) {
|
|
2315
|
+
var _window;
|
|
2316
|
+
|
|
2317
|
+
e == null ? void 0 : e.preventDefault();
|
|
2318
|
+
if (typeof search !== 'string') return;
|
|
2319
|
+
var path = search;
|
|
2320
|
+
|
|
2321
|
+
if (path[0] !== '/') {
|
|
2322
|
+
path = "/" + path;
|
|
2323
|
+
}
|
|
2324
|
+
|
|
2325
|
+
var params = new URLSearchParams((_window = window) == null ? void 0 : _window.location.search);
|
|
2326
|
+
params.set('search', queryOverride != null ? queryOverride : query);
|
|
2327
|
+
params.set('page', '1');
|
|
2328
|
+
router.get(path + "?" + params.toString());
|
|
2329
|
+
}
|
|
2330
|
+
|
|
2331
|
+
return React__default.createElement("div", {
|
|
2332
|
+
ref: searchRef,
|
|
2333
|
+
className: ""
|
|
2334
|
+
}, !active && React__default.createElement("button", {
|
|
2335
|
+
title: "Open Search Bar",
|
|
2336
|
+
type: "button",
|
|
2337
|
+
onClick: function onClick() {
|
|
2338
|
+
return onActive(true);
|
|
2339
|
+
},
|
|
2340
|
+
className: "flex items-center justify-center rounded-full hover:text-teal p-1 transition-colors hover:bg-gray-100"
|
|
2341
|
+
}, React__default.createElement(HiMagnifyingGlass, {
|
|
2342
|
+
className: "h-5 w-5 stroke-[1.25]"
|
|
2343
|
+
})), active && React__default.createElement("form", {
|
|
2344
|
+
onSubmit: handleSearch,
|
|
2345
|
+
className: "group flex items-center gap-2 rounded-full bg-white pr-4 pl-1 shadow transition-all focus-within:outline-none focus-within:ring-1 focus-within:ring-teal"
|
|
2346
|
+
}, React__default.createElement("input", {
|
|
2347
|
+
type: "text",
|
|
2348
|
+
name: "search",
|
|
2349
|
+
id: "search",
|
|
2350
|
+
value: query,
|
|
2351
|
+
onChange: function onChange(e) {
|
|
2352
|
+
return setQuery(e.currentTarget.value || '');
|
|
2353
|
+
},
|
|
2354
|
+
className: "!focus:border-0 !border-0 !bg-transparent !shadow-none !ring-opacity-0 !transition-none placeholder:text-gray-400 !py-1.5 text-sm",
|
|
2355
|
+
autoFocus: true,
|
|
2356
|
+
placeholder: placeholder
|
|
2357
|
+
}), query && React__default.createElement("button", {
|
|
2358
|
+
type: "button",
|
|
2359
|
+
title: "Clear Search",
|
|
2360
|
+
onClick: function onClick() {
|
|
2361
|
+
setQuery('');
|
|
2362
|
+
handleSearch(undefined, '');
|
|
2363
|
+
}
|
|
2364
|
+
}, React__default.createElement(HiXMark, {
|
|
2365
|
+
className: "h-5 w-5"
|
|
2366
|
+
})), React__default.createElement("button", {
|
|
2367
|
+
type: "submit"
|
|
2368
|
+
}, React__default.createElement(HiMagnifyingGlass, {
|
|
2369
|
+
className: "h-5 w-5"
|
|
2370
|
+
}))));
|
|
2371
|
+
}
|
|
2372
|
+
|
|
2373
|
+
function Action(_ref) {
|
|
2374
|
+
var title = _ref.title,
|
|
2375
|
+
href = _ref.href,
|
|
2376
|
+
_ref$as = _ref.as,
|
|
2377
|
+
as = _ref$as === void 0 ? 'Link' : _ref$as,
|
|
2378
|
+
_ref$target = _ref.target,
|
|
2379
|
+
target = _ref$target === void 0 ? '_self' : _ref$target,
|
|
2380
|
+
type = _ref.type,
|
|
2381
|
+
_ref$onClick = _ref.onClick,
|
|
2382
|
+
_onClick = _ref$onClick === void 0 ? function () {} : _ref$onClick;
|
|
2383
|
+
|
|
2384
|
+
var className = 'bg-white rounded-full font-bold px-3 py-1.5 text-xs whitespace-nowrap hover:bg-gray-100 hover:border-gray-300 transition-colors border border-gray-200';
|
|
2385
|
+
|
|
2386
|
+
if (as === 'Link' && href) {
|
|
2387
|
+
return React__default.createElement(Link, {
|
|
2388
|
+
className: className,
|
|
2389
|
+
href: href
|
|
2390
|
+
}, title);
|
|
2391
|
+
}
|
|
2392
|
+
|
|
2393
|
+
if (as === 'a' && href) {
|
|
2394
|
+
return React__default.createElement("a", {
|
|
2395
|
+
className: className,
|
|
2396
|
+
target: target,
|
|
2397
|
+
href: href
|
|
2398
|
+
}, title);
|
|
2399
|
+
}
|
|
2400
|
+
|
|
2401
|
+
return React__default.createElement("button", {
|
|
2402
|
+
className: className,
|
|
2403
|
+
type: type,
|
|
2404
|
+
onClick: function onClick() {
|
|
2405
|
+
return _onClick();
|
|
2406
|
+
}
|
|
2407
|
+
}, title);
|
|
2408
|
+
}
|
|
2409
|
+
|
|
2410
|
+
var DropdownTitle = /*#__PURE__*/createSlot('button');
|
|
2411
|
+
var DropdownContent = /*#__PURE__*/createSlot('form');
|
|
2412
|
+
|
|
2413
|
+
function Dropdown(_ref) {
|
|
2414
|
+
var children = _ref.children,
|
|
2415
|
+
onClose = _ref.onClose,
|
|
2416
|
+
active = _ref.active;
|
|
2417
|
+
var ref = React__default.useRef(null);
|
|
2418
|
+
var innerRef = React__default.useRef(null);
|
|
2419
|
+
useClickOutside(ref, function () {
|
|
2420
|
+
return onClose(false);
|
|
2421
|
+
});
|
|
2422
|
+
React__default.useEffect(function () {
|
|
2423
|
+
var current = ref == null ? void 0 : ref.current;
|
|
2424
|
+
var innerCurrent = innerRef.current;
|
|
2425
|
+
current == null ? void 0 : current.classList.toggle('active', active);
|
|
2426
|
+
if (!current || !innerCurrent) return;
|
|
2427
|
+
var pos = current == null ? void 0 : current.getBoundingClientRect();
|
|
2428
|
+
innerCurrent.style.setProperty('left', (pos == null ? void 0 : pos.left) + "px");
|
|
2429
|
+
}, [active, ref.current, innerRef.current]);
|
|
2430
|
+
return createHost(children, function (Slots) {
|
|
2431
|
+
return React__default.createElement("div", {
|
|
2432
|
+
ref: ref,
|
|
2433
|
+
className: "static inline-block"
|
|
2434
|
+
}, Slots.get(DropdownTitle), active && React__default.createElement("div", {
|
|
2435
|
+
ref: innerRef,
|
|
2436
|
+
className: "absolute children z-10 flex flex-col"
|
|
2437
|
+
}, Slots.get(DropdownContent)));
|
|
2438
|
+
});
|
|
2439
|
+
}
|
|
2440
|
+
Dropdown.Title = DropdownTitle;
|
|
2441
|
+
Dropdown.Content = DropdownContent;
|
|
2442
|
+
|
|
2443
|
+
function FilterItem(_ref) {
|
|
2444
|
+
var _filter$options, _filter$options2, _filter$options3, _selected$, _selected$2;
|
|
2445
|
+
|
|
2446
|
+
var filter = _ref.filter;
|
|
2447
|
+
|
|
2448
|
+
var _React$useState = React__default.useState(false),
|
|
2449
|
+
isOpen = _React$useState[0],
|
|
2450
|
+
setOpen = _React$useState[1];
|
|
2451
|
+
|
|
2452
|
+
var _React$useState2 = React__default.useState([]),
|
|
2453
|
+
selected = _React$useState2[0],
|
|
2454
|
+
setSelected = _React$useState2[1];
|
|
2455
|
+
|
|
2456
|
+
var _React$useState3 = React__default.useState([]),
|
|
2457
|
+
selectedOptions = _React$useState3[0],
|
|
2458
|
+
setSelectedOptions = _React$useState3[1]; // Filter type: select
|
|
2459
|
+
|
|
2460
|
+
|
|
2461
|
+
var hasFilters = selected.length > 0; // Populate values on load
|
|
2462
|
+
|
|
2463
|
+
React__default.useEffect(function () {
|
|
2464
|
+
if (typeof window !== 'undefined') {
|
|
2465
|
+
var search = new URLSearchParams(window.location.search);
|
|
2466
|
+
|
|
2467
|
+
if (filter.type === 'date') {
|
|
2468
|
+
var fromDate = search.get(filter.name + "[from]");
|
|
2469
|
+
var toDate = search.get(filter.name + "[to]");
|
|
2470
|
+
|
|
2471
|
+
if (fromDate && toDate) {
|
|
2472
|
+
setSelected([fromDate, toDate]);
|
|
2473
|
+
}
|
|
2474
|
+
} else if (filter.type === 'greaterThan') {
|
|
2475
|
+
var selectedFromUrl = search.getAll(filter.name + "-GTE");
|
|
2476
|
+
|
|
2477
|
+
if (selectedFromUrl) {
|
|
2478
|
+
setSelected(selectedFromUrl);
|
|
2479
|
+
}
|
|
2480
|
+
} else if (filter.type === 'scope') {
|
|
2481
|
+
var _selectedFromUrl = search.getAll("scope" + filter.name);
|
|
2482
|
+
|
|
2483
|
+
if (_selectedFromUrl) {
|
|
2484
|
+
setSelected(_selectedFromUrl);
|
|
2485
|
+
}
|
|
2486
|
+
} else if (filter.type === 'select') {
|
|
2487
|
+
var _selectedFromUrl2 = search.getAll(filter.name + "[]");
|
|
2488
|
+
|
|
2489
|
+
if (_selectedFromUrl2) {
|
|
2490
|
+
setSelected(_selectedFromUrl2);
|
|
2491
|
+
|
|
2492
|
+
var _selectedOptions = filter.options && filter.options.filter(function (item) {
|
|
2493
|
+
return _selectedFromUrl2.includes(item.value.toString());
|
|
2494
|
+
});
|
|
2495
|
+
|
|
2496
|
+
_selectedOptions && setSelectedOptions(_selectedOptions);
|
|
2497
|
+
}
|
|
2498
|
+
} else {
|
|
2499
|
+
var _selectedFromUrl3 = search.getAll(filter.name + "[]");
|
|
2500
|
+
|
|
2501
|
+
if (_selectedFromUrl3) {
|
|
2502
|
+
setSelected(_selectedFromUrl3);
|
|
2503
|
+
}
|
|
2504
|
+
}
|
|
2505
|
+
}
|
|
2506
|
+
}, []);
|
|
2507
|
+
|
|
2508
|
+
function handleInput(e) {
|
|
2509
|
+
var _e$currentTarget = e.currentTarget,
|
|
2510
|
+
value = _e$currentTarget.value,
|
|
2511
|
+
checked = _e$currentTarget.checked;
|
|
2512
|
+
|
|
2513
|
+
if (checked) {
|
|
2514
|
+
setSelected(function (curr) {
|
|
2515
|
+
return [].concat(curr, [value]);
|
|
2516
|
+
});
|
|
2517
|
+
} else {
|
|
2518
|
+
setSelected(selected.filter(function (f) {
|
|
2519
|
+
return f !== value;
|
|
2520
|
+
}));
|
|
2521
|
+
}
|
|
2522
|
+
}
|
|
2523
|
+
|
|
2524
|
+
function handleDateSelect(e) {
|
|
2525
|
+
var _e$currentTarget2 = e.currentTarget,
|
|
2526
|
+
name = _e$currentTarget2.name,
|
|
2527
|
+
value = _e$currentTarget2.value; // First value in "selected" will be the "from", second will be the "to"
|
|
2528
|
+
|
|
2529
|
+
if (name.includes('from')) {
|
|
2530
|
+
return setSelected([value]);
|
|
2531
|
+
}
|
|
2532
|
+
|
|
2533
|
+
if (name.includes('to')) {
|
|
2534
|
+
// Make sure we have a "from" value first
|
|
2535
|
+
if (selected.length === 0) {
|
|
2536
|
+
// We'll default to a year ago if nothing entered
|
|
2537
|
+
return setSelected([format(subYears(new Date(), 1), 'yyyy-MM-dd'), value]);
|
|
2538
|
+
}
|
|
2539
|
+
|
|
2540
|
+
return setSelected([selected[0], value]);
|
|
2541
|
+
}
|
|
2542
|
+
|
|
2543
|
+
return setSelected([]);
|
|
2544
|
+
}
|
|
2545
|
+
/**
|
|
2546
|
+
* Handle Select for FilterType: Select
|
|
2547
|
+
*/
|
|
2548
|
+
|
|
2549
|
+
|
|
2550
|
+
var handleSelectedOptions = function handleSelectedOptions(options) {
|
|
2551
|
+
setSelectedOptions(options);
|
|
2552
|
+
var selectedValues = options.map(function (option) {
|
|
2553
|
+
return option.value.toString();
|
|
2554
|
+
});
|
|
2555
|
+
|
|
2556
|
+
if (selectedValues.length > 0) {
|
|
2557
|
+
setSelected(selectedValues);
|
|
2558
|
+
} else {
|
|
2559
|
+
setSelected([]);
|
|
2560
|
+
}
|
|
2561
|
+
};
|
|
2562
|
+
/**
|
|
2563
|
+
* For Filter Select
|
|
2564
|
+
* Removes the Clear Button
|
|
2565
|
+
*/
|
|
2566
|
+
|
|
2567
|
+
|
|
2568
|
+
function NullComponent() {
|
|
2569
|
+
return null;
|
|
2570
|
+
}
|
|
2571
|
+
|
|
2572
|
+
function handleSelect(e) {
|
|
2573
|
+
var value = e.currentTarget.value;
|
|
2574
|
+
|
|
2575
|
+
if (value) {
|
|
2576
|
+
setSelected([value]);
|
|
2577
|
+
} else {
|
|
2578
|
+
setSelected([]);
|
|
2579
|
+
}
|
|
2580
|
+
}
|
|
2581
|
+
|
|
2582
|
+
function handleApply(e) {
|
|
2583
|
+
e.preventDefault();
|
|
2584
|
+
var search = new URLSearchParams(window.location.search); // Reset the page in the query
|
|
2585
|
+
|
|
2586
|
+
search.set('page', '1');
|
|
2587
|
+
|
|
2588
|
+
if (filter.type === 'date') {
|
|
2589
|
+
var from = selected[0],
|
|
2590
|
+
to = selected[1];
|
|
2591
|
+
search.set(filter.name + "[from]", from != null ? from : format(new Date(), 'yyyy-MM-dd'));
|
|
2592
|
+
search.set(filter.name + "[to]", to != null ? to : format(new Date(), 'yyyy-MM-dd'));
|
|
2593
|
+
} else if (filter.type === 'greaterThan') {
|
|
2594
|
+
search["delete"](filter.name + "-GTE");
|
|
2595
|
+
|
|
2596
|
+
if (selected.length > 0) {
|
|
2597
|
+
search.set(filter.name + "-GTE", selected[0]);
|
|
2598
|
+
}
|
|
2599
|
+
} else if (filter.type === 'scope') {
|
|
2600
|
+
search["delete"]("" + filter.name);
|
|
2601
|
+
|
|
2602
|
+
if (selected.length > 0) {
|
|
2603
|
+
search.set("scope" + filter.name, selected[0]);
|
|
2604
|
+
}
|
|
2605
|
+
} else {
|
|
2606
|
+
// Clear this filter first
|
|
2607
|
+
search["delete"](filter.name + "[]"); // Apply the filters to the query string
|
|
2608
|
+
|
|
2609
|
+
selected.forEach(function (selectedValue) {
|
|
2610
|
+
// Fall back to option equality filters
|
|
2611
|
+
search.append(filter.name + "[]", selectedValue);
|
|
2612
|
+
});
|
|
2613
|
+
} // Fetch new data
|
|
2614
|
+
|
|
2615
|
+
|
|
2616
|
+
router.get(window.location.pathname + "?" + search.toString());
|
|
2617
|
+
}
|
|
2618
|
+
|
|
2619
|
+
function handleClear() {
|
|
2620
|
+
var search = new URLSearchParams(window.location.search); // Reset the page in the query
|
|
2621
|
+
|
|
2622
|
+
search.set('page', '1'); // Clear this filter
|
|
2623
|
+
|
|
2624
|
+
if (filter.type === 'date') {
|
|
2625
|
+
search["delete"](filter.name + "[from]");
|
|
2626
|
+
search["delete"](filter.name + "[to]");
|
|
2627
|
+
} else if (filter.type === 'greaterThan') {
|
|
2628
|
+
search["delete"](filter.name + "-GTE");
|
|
2629
|
+
} else if (filter.type === 'scope') {
|
|
2630
|
+
search["delete"]("scope" + filter.name);
|
|
2631
|
+
} else {
|
|
2632
|
+
search["delete"](filter.name + "[]");
|
|
2633
|
+
} // Fetch new data
|
|
2634
|
+
|
|
2635
|
+
|
|
2636
|
+
router.get(window.location.pathname + "?" + search.toString());
|
|
2637
|
+
}
|
|
2638
|
+
|
|
2639
|
+
function handleClick(force) {
|
|
2640
|
+
if (typeof force === 'boolean') {
|
|
2641
|
+
return setOpen(force);
|
|
2642
|
+
}
|
|
2643
|
+
|
|
2644
|
+
setOpen(!isOpen);
|
|
2645
|
+
}
|
|
2646
|
+
|
|
2647
|
+
return React__default.createElement(Dropdown, {
|
|
2648
|
+
onClose: function onClose() {
|
|
2649
|
+
return setOpen(!open);
|
|
2650
|
+
},
|
|
2651
|
+
active: isOpen
|
|
2652
|
+
}, React__default.createElement(Dropdown.Title, {
|
|
2653
|
+
onClick: function onClick() {
|
|
2654
|
+
return handleClick();
|
|
2655
|
+
},
|
|
2656
|
+
className: cn('flex rounded-2xl border hover:border-teal bg-gray-600 min-w-[90px] px-2 py-1 items-center justify-between shrink-0 gap-2 text-xs text-white hover:bg-teal transition-colors', {
|
|
2657
|
+
'!bg-teal border-teal': hasFilters
|
|
2658
|
+
})
|
|
2659
|
+
}, React__default.createElement("p", {
|
|
2660
|
+
className: "whitespace-nowrap"
|
|
2661
|
+
}, filter.label), React__default.createElement(HiChevronDown, null)), React__default.createElement(Dropdown.Content, {
|
|
2662
|
+
className: "mt-2 flex max-h-[350px] min-w-[200px] flex-col gap-2 rounded-md border border-gray-300 bg-white p-4 shadow-lg " + (filter.type && filter.type === 'select' ? '' : 'overflow-y-scroll'),
|
|
2663
|
+
onSubmit: handleApply
|
|
2664
|
+
}, React__default.createElement("div", {
|
|
2665
|
+
className: "flex flex-col items-start gap-1"
|
|
2666
|
+
}, (!filter.type || filter.type === 'options') && ((_filter$options = filter.options) == null ? void 0 : _filter$options.map(function (option, i) {
|
|
2667
|
+
return React__default.createElement("div", {
|
|
2668
|
+
className: "checkbox text-sm ",
|
|
2669
|
+
key: option.label + "-" + i
|
|
2670
|
+
}, React__default.createElement("input", {
|
|
2671
|
+
type: "checkbox",
|
|
2672
|
+
name: filter.name,
|
|
2673
|
+
id: option.label,
|
|
2674
|
+
value: option.value.toString(),
|
|
2675
|
+
checked: selected.includes(option.value.toString()),
|
|
2676
|
+
onChange: handleInput
|
|
2677
|
+
}), React__default.createElement("label", {
|
|
2678
|
+
className: "whitespace-nowrap",
|
|
2679
|
+
htmlFor: option.label
|
|
2680
|
+
}, option.label));
|
|
2681
|
+
})), filter.type === 'greaterThan' && filter.options && React__default.createElement("label", {
|
|
2682
|
+
className: "mb-2 w-full"
|
|
2683
|
+
}, React__default.createElement("div", {
|
|
2684
|
+
className: "text-sm"
|
|
2685
|
+
}, "Greater than or equal to"), React__default.createElement("select", {
|
|
2686
|
+
name: filter.name,
|
|
2687
|
+
id: filter.label,
|
|
2688
|
+
value: selected[0],
|
|
2689
|
+
onChange: handleSelect,
|
|
2690
|
+
className: "w-full"
|
|
2691
|
+
}, React__default.createElement("option", {
|
|
2692
|
+
value: ""
|
|
2693
|
+
}, "Select option"), (_filter$options2 = filter.options) == null ? void 0 : _filter$options2.map(function (option) {
|
|
2694
|
+
return React__default.createElement("option", {
|
|
2695
|
+
key: option.value,
|
|
2696
|
+
value: option.value
|
|
2697
|
+
}, option.label);
|
|
2698
|
+
}))), filter.type === 'scope' && filter.options && React__default.createElement("label", {
|
|
2699
|
+
className: "mb-2 w-full"
|
|
2700
|
+
}, React__default.createElement("select", {
|
|
2701
|
+
name: filter.name,
|
|
2702
|
+
id: filter.label,
|
|
2703
|
+
value: selected[0],
|
|
2704
|
+
onChange: handleSelect,
|
|
2705
|
+
className: "w-full"
|
|
2706
|
+
}, React__default.createElement("option", {
|
|
2707
|
+
value: ""
|
|
2708
|
+
}, "Select option"), (_filter$options3 = filter.options) == null ? void 0 : _filter$options3.map(function (option) {
|
|
2709
|
+
return React__default.createElement("option", {
|
|
2710
|
+
key: option.value,
|
|
2711
|
+
value: option.value
|
|
2712
|
+
}, option.label);
|
|
2713
|
+
}))), filter.type === 'date' && React__default.createElement("div", {
|
|
2714
|
+
className: "mb-2 flex flex-col gap-4"
|
|
2715
|
+
}, React__default.createElement("label", {
|
|
2716
|
+
className: "text-xs"
|
|
2717
|
+
}, "From", React__default.createElement("input", {
|
|
2718
|
+
type: "date",
|
|
2719
|
+
name: filter.name + "[from]",
|
|
2720
|
+
id: filter.name + "[from]",
|
|
2721
|
+
onChange: handleDateSelect,
|
|
2722
|
+
value: (_selected$ = selected[0]) != null ? _selected$ : ''
|
|
2723
|
+
})), React__default.createElement("label", {
|
|
2724
|
+
className: "text-xs"
|
|
2725
|
+
}, "To", React__default.createElement("input", {
|
|
2726
|
+
type: "date",
|
|
2727
|
+
name: filter.name + "[to]",
|
|
2728
|
+
id: filter.name + "[to]",
|
|
2729
|
+
onChange: handleDateSelect,
|
|
2730
|
+
value: (_selected$2 = selected[1]) != null ? _selected$2 : ''
|
|
2731
|
+
}))), filter.type === 'select' && filter.options && React__default.createElement("div", {
|
|
2732
|
+
className: "w-full"
|
|
2733
|
+
}, React__default.createElement(Select, {
|
|
2734
|
+
isMulti: true,
|
|
2735
|
+
options: filter.options,
|
|
2736
|
+
className: "basic-multi-select text-sm w-64 !transition-none",
|
|
2737
|
+
classNamePrefix: "select",
|
|
2738
|
+
onChange: handleSelectedOptions,
|
|
2739
|
+
components: {
|
|
2740
|
+
ClearIndicator: NullComponent
|
|
2741
|
+
},
|
|
2742
|
+
value: selectedOptions,
|
|
2743
|
+
theme: function theme(_theme) {
|
|
2744
|
+
return _extends({}, _theme, {
|
|
2745
|
+
colors: _extends({}, _theme.colors, {
|
|
2746
|
+
primary25: 'rgb(111, 199, 182)',
|
|
2747
|
+
primary: 'rgb(111, 199, 182)'
|
|
2748
|
+
})
|
|
2749
|
+
});
|
|
2750
|
+
}
|
|
2751
|
+
}))), React__default.createElement("div", {
|
|
2752
|
+
className: "flex items-center gap-2"
|
|
2753
|
+
}, React__default.createElement(Button, {
|
|
2754
|
+
type: "button",
|
|
2755
|
+
className: "!min-w-[0px] flex-grow !px-2 text-sm !transition-none",
|
|
2756
|
+
onClick: handleClear
|
|
2757
|
+
}, "Clear"), React__default.createElement(Button, {
|
|
2758
|
+
type: "submit",
|
|
2759
|
+
status: "primary",
|
|
2760
|
+
className: "!min-w-[0px] flex-grow !px-2 text-sm !transition-none"
|
|
2761
|
+
}, "Apply"))));
|
|
2762
|
+
}
|
|
2763
|
+
|
|
2764
|
+
function PageHeader(_ref) {
|
|
2765
|
+
var title = _ref.title,
|
|
2766
|
+
search = _ref.search,
|
|
2767
|
+
_ref$className = _ref.className,
|
|
2768
|
+
className = _ref$className === void 0 ? '' : _ref$className,
|
|
2769
|
+
_ref$innerClassName = _ref.innerClassName,
|
|
2770
|
+
innerClassName = _ref$innerClassName === void 0 ? '' : _ref$innerClassName,
|
|
2771
|
+
_ref$back = _ref.back,
|
|
2772
|
+
back = _ref$back === void 0 ? true : _ref$back,
|
|
2773
|
+
_ref$actions = _ref.actions,
|
|
2774
|
+
actions = _ref$actions === void 0 ? [] : _ref$actions,
|
|
2775
|
+
_ref$filterOptions = _ref.filterOptions,
|
|
2776
|
+
filterOptions = _ref$filterOptions === void 0 ? [] : _ref$filterOptions;
|
|
2777
|
+
|
|
2778
|
+
var _React$useState = React__default.useState(false),
|
|
2779
|
+
isSearchActive = _React$useState[0],
|
|
2780
|
+
setSearchActive = _React$useState[1];
|
|
2781
|
+
|
|
2782
|
+
var scrollContainerRef = React__default.useRef(null);
|
|
2783
|
+
|
|
2784
|
+
var _React$useState2 = React__default.useState(false),
|
|
2785
|
+
overScroll = _React$useState2[0],
|
|
2786
|
+
setOverScroll = _React$useState2[1];
|
|
2787
|
+
|
|
2788
|
+
React__default.useEffect(function () {
|
|
2789
|
+
var current = scrollContainerRef.current;
|
|
2790
|
+
if (!current) return;
|
|
2791
|
+
|
|
2792
|
+
var listener = function listener() {
|
|
2793
|
+
var activeDropdown = current.querySelector('.active');
|
|
2794
|
+
if (!activeDropdown) return;
|
|
2795
|
+
var childrenContainer = activeDropdown.querySelector('.children');
|
|
2796
|
+
if (!childrenContainer) return;
|
|
2797
|
+
var pos = activeDropdown.getBoundingClientRect();
|
|
2798
|
+
var posChild = childrenContainer.getBoundingClientRect();
|
|
2799
|
+
var posContainer = current.getBoundingClientRect(); // if the dropdown content moves outside the scroll container to the left, make it disappear
|
|
2800
|
+
|
|
2801
|
+
if (posChild.left <= posContainer.left - 50) {
|
|
2802
|
+
// @ts-ignore
|
|
2803
|
+
childrenContainer.style.visibility = 'hidden';
|
|
2804
|
+
} else if (posChild.left >= posContainer.right - 50) {
|
|
2805
|
+
// @ts-ignore
|
|
2806
|
+
childrenContainer.style.visibility = 'hidden';
|
|
2807
|
+
} else {
|
|
2808
|
+
// @ts-ignore
|
|
2809
|
+
childrenContainer.style.visibility = 'visible';
|
|
2810
|
+
} // @ts-ignore
|
|
2811
|
+
|
|
2812
|
+
|
|
2813
|
+
childrenContainer.style.left = pos.left + "px";
|
|
2814
|
+
};
|
|
2815
|
+
|
|
2816
|
+
var mouseListener = function mouseListener(e) {
|
|
2817
|
+
var pos = current.getBoundingClientRect();
|
|
2818
|
+
|
|
2819
|
+
if (e.clientX > pos.left && e.clientX < pos.right && e.clientY > pos.top && e.clientY < pos.bottom) {
|
|
2820
|
+
setOverScroll(true);
|
|
2821
|
+
} else {
|
|
2822
|
+
setOverScroll(false);
|
|
2823
|
+
}
|
|
2824
|
+
};
|
|
2825
|
+
|
|
2826
|
+
current.addEventListener('scroll', listener);
|
|
2827
|
+
document.addEventListener('mousemove', mouseListener);
|
|
2828
|
+
return function () {
|
|
2829
|
+
current.removeEventListener('scroll', listener);
|
|
2830
|
+
document.removeEventListener('mousemove', mouseListener);
|
|
2831
|
+
};
|
|
2832
|
+
}, []);
|
|
2833
|
+
React__default.useEffect(function () {
|
|
2834
|
+
var scrollListener = function scrollListener(e) {
|
|
2835
|
+
if (overScroll) {
|
|
2836
|
+
var _scrollContainerRef$c;
|
|
2837
|
+
|
|
2838
|
+
e.preventDefault();
|
|
2839
|
+
(_scrollContainerRef$c = scrollContainerRef.current) == null ? void 0 : _scrollContainerRef$c.scrollBy({
|
|
2840
|
+
left: e.deltaY,
|
|
2841
|
+
behavior: 'auto'
|
|
2842
|
+
});
|
|
2843
|
+
}
|
|
2844
|
+
};
|
|
2845
|
+
|
|
2846
|
+
document.addEventListener('wheel', scrollListener, {
|
|
2847
|
+
passive: false
|
|
2848
|
+
});
|
|
2849
|
+
return function () {
|
|
2850
|
+
document.removeEventListener('wheel', scrollListener);
|
|
2851
|
+
};
|
|
2852
|
+
}, [overScroll]);
|
|
2853
|
+
|
|
2854
|
+
function handleClear() {
|
|
2855
|
+
router$1.get("" + window.location.pathname);
|
|
2856
|
+
}
|
|
2857
|
+
|
|
2858
|
+
var _React$useState3 = React__default.useState(false),
|
|
2859
|
+
hasScroll = _React$useState3[0],
|
|
2860
|
+
setHasScroll = _React$useState3[1];
|
|
2861
|
+
|
|
2862
|
+
var checkScroll = React__default.useCallback(function () {
|
|
2863
|
+
var current = scrollContainerRef.current;
|
|
2864
|
+
if (!current) return;
|
|
2865
|
+
var pos = current.getBoundingClientRect();
|
|
2866
|
+
setHasScroll(current.scrollWidth > pos.width + 11);
|
|
2867
|
+
}, [scrollContainerRef.current]);
|
|
2868
|
+
React__default.useEffect(function () {
|
|
2869
|
+
checkScroll();
|
|
2870
|
+
window.addEventListener('resize', checkScroll);
|
|
2871
|
+
return function () {
|
|
2872
|
+
window.removeEventListener('resize', checkScroll);
|
|
2873
|
+
};
|
|
2874
|
+
}, [checkScroll]);
|
|
2875
|
+
|
|
2876
|
+
function clickRight() {
|
|
2877
|
+
var _scrollContainerRef$c2;
|
|
2878
|
+
|
|
2879
|
+
(_scrollContainerRef$c2 = scrollContainerRef.current) == null ? void 0 : _scrollContainerRef$c2.scrollBy({
|
|
2880
|
+
left: 100,
|
|
2881
|
+
behavior: 'auto'
|
|
2882
|
+
});
|
|
2883
|
+
checkScroll();
|
|
2884
|
+
}
|
|
2885
|
+
|
|
2886
|
+
function clickLeft() {
|
|
2887
|
+
var _scrollContainerRef$c3;
|
|
2888
|
+
|
|
2889
|
+
(_scrollContainerRef$c3 = scrollContainerRef.current) == null ? void 0 : _scrollContainerRef$c3.scrollBy({
|
|
2890
|
+
left: -100,
|
|
2891
|
+
behavior: 'auto'
|
|
2892
|
+
});
|
|
2893
|
+
checkScroll();
|
|
2894
|
+
}
|
|
2895
|
+
|
|
2896
|
+
return React__default.createElement("section", {
|
|
2897
|
+
className: cn('col-span-full max-w-full rounded-lg bg-white p-2 shadow', className)
|
|
2898
|
+
}, React__default.createElement("div", {
|
|
2899
|
+
className: cn('grid grid-cols-[auto_1fr_auto] min-h-[60px] rounded gap-4 bg-gray-100 p-3', innerClassName)
|
|
2900
|
+
}, React__default.createElement("div", {
|
|
2901
|
+
className: "mr-auto flex items-center gap-4"
|
|
2902
|
+
}, back && React__default.createElement(BackButton, {
|
|
2903
|
+
back: back
|
|
2904
|
+
}), search && React__default.createElement(SearchBar, {
|
|
2905
|
+
search: search,
|
|
2906
|
+
active: isSearchActive,
|
|
2907
|
+
onActive: setSearchActive,
|
|
2908
|
+
placeholder: "Search " + title + "..."
|
|
2909
|
+
}), !isSearchActive && React__default.createElement("h1", {
|
|
2910
|
+
className: "text-base font-bold"
|
|
2911
|
+
}, title)), React__default.createElement("div", {
|
|
2912
|
+
className: "flex ml-auto items-center max-w-sm md:max-w-md lg:max-w-lg xl:max-w-2xl gap-2 h-full min-w-0"
|
|
2913
|
+
}, filterOptions.length > 0 && React__default.createElement(React__default.Fragment, null, React__default.createElement("button", {
|
|
2914
|
+
onClick: handleClear,
|
|
2915
|
+
className: "p-1.5 hover:text-red-500"
|
|
2916
|
+
}, React__default.createElement(HiXMark, {
|
|
2917
|
+
className: "w-5 h-5 stroke-[1.25]"
|
|
2918
|
+
})), hasScroll && React__default.createElement(HiChevronLeft, {
|
|
2919
|
+
onClick: clickLeft,
|
|
2920
|
+
className: "w-5 h-5 text-gray-400 stroke-[1.25]"
|
|
2921
|
+
}), React__default.createElement("div", {
|
|
2922
|
+
ref: scrollContainerRef,
|
|
2923
|
+
className: "flex items-center h-full w-full gap-3 overflow-x-scroll hide-scroll"
|
|
2924
|
+
}, filterOptions.map(function (filter) {
|
|
2925
|
+
return React__default.createElement(FilterItem, {
|
|
2926
|
+
key: filter.name,
|
|
2927
|
+
filter: filter
|
|
2928
|
+
});
|
|
2929
|
+
})), hasScroll && React__default.createElement(HiChevronRight, {
|
|
2930
|
+
onClick: clickRight,
|
|
2931
|
+
className: "w-5 h-5 text-gray-400 stroke-[1.25]"
|
|
2932
|
+
}))), actions.length > 0 && React__default.createElement("div", {
|
|
2933
|
+
className: "flex items-center gap-3"
|
|
2934
|
+
}, filterOptions.length > 0 && React__default.createElement("div", {
|
|
2935
|
+
className: "w-[1px] h-full bg-gray-300"
|
|
2936
|
+
}), React__default.createElement("nav", {
|
|
2937
|
+
className: "flex items-center gap-2"
|
|
2938
|
+
}, actions.map(function (action) {
|
|
2939
|
+
return React__default.createElement(Action, Object.assign({
|
|
2940
|
+
key: action.title + "-" + action.as + "-" + action.href
|
|
2941
|
+
}, action));
|
|
2942
|
+
})))));
|
|
2943
|
+
}
|
|
2944
|
+
|
|
2945
|
+
export { Button, Card, DateOfBirthField, ErrorList, FormTester, Modal, MoneyField, PageHeader, Pagination, QuoteRequestFormContext, QuoteRequestFormProvider, QuoteRequestOptionsProvider, RegistrationSearchField, SimplePagination, Table, TableActions, TableBody, TableCell, TableHead, TableHeader, TableRow, ToastItem, ToastProvider, Toasts, addGst, autocomplete, calcMonthlyEnhancementPrice, calcPurchaseOptionPricing, calculateAge, fixRoundingError, formatDateForTable, formatDateNice, formatMoney, formatNumber, getAddressData, getGst, gstCalc, initialData, parseDate, parseDateTime, round, sanitiseQuoteRequestFormData, sanitiseVehicleType, subtractGst, useAuth, useClickOutside, useInertiaOptions, useLocalStorage, useQuoteRequestForm, useQuoteRequestOptions, useToast };
|
|
2223
2946
|
//# sourceMappingURL=sdk.esm.js.map
|