zavadil-react-common 2.1.11 → 2.1.13
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/component/forms/IconButton.d.ts +3 -2
- package/dist/component/forms/LoadingButton.d.ts +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/component/forms/IconButton.tsx +39 -26
- package/src/component/forms/LoadingButton.tsx +43 -17
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("react/jsx-runtime"),t=require("zavadil-ts-common"),n=require("react"),s=require("react-bootstrap"),i=require("react-icons/bs"),a=require("react-icons/fa6"),o=require("react-icons/vsc");const l=n.createContext(new t.BasicLocalization);function r({text:t,tag:s}){const i=n.useContext(l),a=n.useMemo((()=>{if(void 0!==s&&""!==s)return"string"==typeof s?{tags:[s]}:{tags:s}}),[s]),o=n.useMemo((()=>i.translate(t,a)),[i,t,a]);return e.jsx(e.Fragment,{children:o})}function c({value:a,onChange:o,onReset:l,onBlur:r,disabled:c,className:d}){const p=n.useMemo((()=>t.StringUtil.getNonEmpty(a)),[a]),u=n.useMemo((()=>t.StringUtil.isBlank(a)),[p]),m=n.useCallback((()=>{l?l():o("")}),[l,o]);return e.jsxs(s.InputGroup,{className:d,children:[e.jsx(s.Form.Control,{type:"text",disabled:c,value:p,onChange:e=>o(e.target.value),onBlur:r}),e.jsx(s.Button,{onClick:m,disabled:u,children:e.jsx("div",{className:"d-flex align-items-center",children:e.jsx(i.BsXCircle,{})})})]})}function d({disabled:t,variant:n,icon:i,size:a,children:o,onClick:l}){return e.jsx(s.Button,{disabled:!0===t,size:a,onClick:l,variant:n,children:e.jsxs("div",{className:"d-flex align-items-center gap-2",children:[i,o&&e.jsx("div",{children:o})]})})}function p({disabled:t,icon:n,loading:i,children:a,size:o,variant:l,onClick:r}){return!0===i?e.jsx(d,{disabled:!0,onClick:r,size:o,variant:l,icon:e.jsx(s.Spinner,{size:"sm"}),children:a}):e.jsx(d,{disabled:t,onClick:r,icon:n,size:o,variant:l,children:a})}function u({value:i,options:a,disabled:o,onChange:l,showEmptyOption:r,emptyOptionLabel:c}){return n.useEffect((()=>{t.StringUtil.isBlank(i)&&a.length>0&&!0!==r&&l(a[0].id)}),[i,a,r,l]),e.jsxs(s.Form.Select,{value:i||"",onChange:e=>l(e.target.value),disabled:o,children:[!0===r&&e.jsx("option",{value:"",children:c||""},""),a?a.map(((t,n)=>e.jsx("option",{value:t.id||"",children:t.label||""},n))):e.jsx("span",{children:e.jsx(s.Spinner,{})})]})}function m({value:s,options:i,disabled:a,onChange:o,showEmptyOption:l,emptyOptionLabel:r}){const c=n.useMemo((()=>s?String(s):""),[s]),d=n.useMemo((()=>i?i.map((e=>({id:e.id?String(e.id):"",label:e.label}))):[]),[i]),p=n.useCallback((e=>o(t.NumberUtil.parseNumber(e))),[o]);return e.jsx(u,{disabled:a,value:c,options:d,onChange:p,showEmptyOption:l,emptyOptionLabel:r})}function x({selected:i,disabled:a,labelGetter:o,onChange:l,onSearch:r}){const[d,p]=n.useState(),[u,m]=n.useState(),[x,h]=n.useState(),g=n.useRef(),j=n.useCallback((e=>o?o(e):"name"in e&&"string"==typeof e.name?e.name:`[${e.id}]`),[o]),b=n.useMemo((()=>i?"border rounded border-primary":void 0),[i]),v=n.useCallback((()=>{console.log("user left control"),x&&(h(void 0),m(i?j(i):""))}),[l,x,i,j]),f=n.useCallback((()=>{g.current=window.setTimeout(v,100)}),[g,v]),C=n.useCallback((()=>{g.current&&clearTimeout(g.current)}),[g]);n.useEffect((()=>C),[]),n.useEffect((()=>{m(i?j(i):""),d&&(d.cancel(),p(void 0)),h(void 0)}),[i]);const y=n.useCallback((()=>{l(null),m(""),d&&(d.cancel(),p(void 0)),h(void 0)}),[l,d]),S=n.useCallback((e=>{m(e),d&&d.cancel();const n=new t.CancellablePromise(r(e));n.promise.then(h),p(n)}),[d,r]),w=n.useCallback((e=>{console.log("user selected item"),h(void 0),l({...e})}),[l]);return e.jsx("div",{onBlur:f,onFocus:C,children:e.jsxs(s.Dropdown,{defaultShow:!1,show:null!==x,children:[e.jsx(c,{disabled:a,value:u,onChange:S,onReset:y,className:b}),x&&e.jsx(s.Dropdown.Menu,{children:x.map((t=>e.jsx(s.Dropdown.Item,{onClick:e=>{C(),w(t)},active:t.id===i?.id,children:j(t)},t.id)))})]})})}function h({selected:s,disabled:i,labelGetter:a,onChange:o,entityClient:l}){const r=n.useCallback((e=>l.loadPage({search:t.StringUtil.safeLowercase(e),page:0,size:10,sorting:[{name:"id"}]}).then((e=>e.content))),[a]);return e.jsx(x,{disabled:i,selected:s,labelGetter:a,onSearch:r,onChange:o})}function g({selected:s,disabled:i,labelGetter:a,onChange:o,lookupClient:l}){const r=n.useMemo((()=>a||(e=>e.name)),[a]),c=n.useCallback((e=>l.loadPage({search:t.StringUtil.safeLowercase(e),page:0,size:10,sorting:[{name:"name"}]}).then((e=>e.content))),[a]);return e.jsx(x,{disabled:i,selected:s,labelGetter:r,onSearch:c,onChange:o})}function j({id:t,sort:s,disabled:i,labelGetter:a,onChange:o,options:l,showEmptyOption:r,emptyOptionLabel:c}){const d=n.useMemo((()=>{let e=[];return l&&(e=s?l.sort(((e,t)=>a(e)>a(t)?1:-1)):l),e.map((e=>({id:e.id,label:a(e)})))}),[l]);return e.jsx(m,{disabled:i,value:t,options:d,onChange:o,showEmptyOption:r,emptyOptionLabel:c})}function b({value:t,sort:n,disabled:s,labelGetter:i,onChange:a,options:o,showEmptyOption:l,emptyOptionLabel:r}){return e.jsx(j,{disabled:s,id:t?t.id:null,options:o,sort:n,onChange:e=>{a(o&&e?o.find((t=>t.id===e)):void 0)},labelGetter:i,showEmptyOption:l,emptyOptionLabel:r})}function v({paging:n,totalItems:i,onPagingChanged:a}){const o=Math.ceil(i/n.size),l=e=>{n.page=e,a(t.ObjectUtil.clone(n))},r=[];if(o>1){r.push(e.jsx(s.Pagination.First,{onClick:()=>l(0),disabled:0===n.page},"first")),r.push(e.jsx(s.Pagination.Prev,{onClick:()=>l(n.page-1),disabled:0===n.page},"prev"));const t=Math.round(3.5);let i=n.page>t?n.page-t:0,a=i+10;a>=o&&(a=o-1),i>0&&r.push(e.jsx(s.Pagination.Ellipsis,{disabled:!0},"ellipsisStart"));for(let t=i;t<=a;t++)r.push(e.jsx(s.Pagination.Item,{active:t===n.page,onClick:()=>l(t),children:t+1},t));a<o-1&&r.push(e.jsx(s.Pagination.Ellipsis,{disabled:!0},"ellipsisEnd")),r.push(e.jsx(s.Pagination.Next,{onClick:()=>l(n.page+1),disabled:n.page===o-1},"next")),r.push(e.jsx(s.Pagination.Last,{onClick:()=>l(o-1),disabled:n.page===o-1},"last"))}return e.jsx(s.Pagination,{size:"sm",className:"flex-wrap m-0",children:r})}const f=[{id:10,label:"10"},{id:100,label:"100"},{id:1e3,label:"1000"}];function C({hover:a,showPagingOnBottom:o,showPageSizeSelection:l,striped:c,bordered:d,header:p,children:u,paging:x,totalItems:h,onPagingChanged:g}){const j=Math.ceil(h/x.size),b=n.useMemo((()=>{const e=x.size;if(null===f.find((t=>t.id===e))){const n=t.ObjectUtil.clone(f);return n.push({id:e,label:String(e)}),n}return f}),[x]);return e.jsx("div",{children:e.jsxs(s.Table,{hover:a,striped:c,responsive:!0,bordered:d,children:[e.jsxs("thead",{children:[e.jsx("tr",{children:e.jsx("td",{colSpan:p.length,children:e.jsxs("div",{className:"d-flex justify-content-between align-items-center gap-2",children:[e.jsxs("div",{children:[e.jsx(r,{text:"Page"}),": ",x.page+1," / ",j]}),j>0&&e.jsx(v,{paging:x,totalItems:h,onPagingChanged:g}),e.jsxs("div",{children:[e.jsx(r,{text:"Total items"}),": ",h]})]})})}),e.jsx("tr",{children:p.map(((n,s)=>{const a=!1===n.sort?"":t.StringUtil.isBlank(n.sort)?n.name:n.sort;if(t.StringUtil.isBlank(a)||!a)return e.jsx("th",{children:n.label},s);const o=x.sorting&&x.sorting.find((e=>e.name===a));return e.jsxs("th",{className:"user-select-none text-nowrap",role:"button",onClick:e=>((e,n)=>{x.sorting||(x.sorting=[]);let s=x.sorting.find((e=>e.name===n));const i=s&&1===x.sorting.length;e.ctrlKey||i||(x.sorting=[],s=void 0),s?s.desc=!s.desc:x.sorting.push({name:n}),g(t.ObjectUtil.clone(x))})(e,a),children:[n.label,o?o.desc?e.jsx(i.BsFillCaretDownFill,{}):e.jsx(i.BsFillCaretUpFill,{}):e.jsx(e.Fragment,{})]},s)}))})]}),e.jsx("tbody",{children:u}),h>0&&e.jsxs("tfoot",{children:[o&&e.jsx("tr",{children:e.jsx("td",{colSpan:p.length,children:e.jsxs("div",{className:"d-flex justify-content-between align-items-center gap-2",children:[e.jsxs("div",{children:[e.jsx(r,{text:"Page"}),": ",x.page+1," / ",j]}),j>0&&e.jsx(v,{paging:x,totalItems:h,onPagingChanged:g}),e.jsxs("div",{children:[e.jsx(r,{text:"Total items"}),": ",h]})]})})}),l&&e.jsx("tr",{children:e.jsx("td",{colSpan:p.length,children:e.jsxs("div",{className:"d-flex align-items-center gap-2 justify-content-end",children:[e.jsxs("div",{className:"text-nowrap",children:[e.jsx(r,{text:"Page size"}),":"]}),e.jsx("div",{children:e.jsx(m,{value:x.size,options:b,onChange:e=>{x.size=e||10,g({...x})},showEmptyOption:!1})})]})})})]})]})})}function y({disabled:t,checked:s,iconOn:a,iconOff:o,size:l,onChange:r}){const c=n.useMemo((()=>s?a||e.jsx(i.BsCheckCircle,{size:l}):o||e.jsx(i.BsCircle,{size:l,className:"text-muted"})),[s,a,o,l]);return e.jsx("div",{className:"d-flex align-items-center cursor-pointer",onClick:e=>{e.stopPropagation(),e.preventDefault(),r(!s)},children:c})}function S({ms:n}){return t.ObjectUtil.isEmpty(n)?e.jsx(e.Fragment,{}):e.jsx("div",{className:"text-nowrap",children:t.DateUtil.formatDuration(n)})}const w=new Map([[t.UserAlertType.error,i.BsBug],[t.UserAlertType.warning,i.BsExclamationDiamond],[t.UserAlertType.info,i.BsInfo]]);function k({type:t,size:n,customVariant:s}){const a=w.get(t)||i.BsQuestion;return e.jsx("div",{className:`d-flex align-items-center text-${void 0===s?t:s}`,children:a({size:n})})}function N({userAlert:n,maxDurationMs:i}){return e.jsxs(s.Stack,{direction:"horizontal",gap:2,className:"align-items-center",children:[n.remainsMs&&e.jsx("div",{style:{width:20},children:e.jsx(s.ProgressBar,{min:0,max:i,now:n.remainsMs,variant:n.type})}),e.jsx("div",{children:t.DateUtil.formatDateForHumans(n.time)}),e.jsx(k,{type:n.type}),e.jsx("div",{children:n.message})]})}class B{constructor(e){this.setProps=e}confirm(e,t,n){this.setProps({name:e,text:t,onConfirm:()=>{n(),this.setProps(void 0)},onClose:()=>this.setProps(void 0)})}}const z=n.createContext(new B((()=>{})));const O=new Map([["Idle","secondary"],["Processing","success"],["Loading","warn"]]);function E({state:t}){const n=O.get(t)||"light";return e.jsx(s.Badge,{className:`bg-${n} text-bg-${n}`,children:t})}exports.AdvancedTable=C,exports.AutocompleteEntityIdSelect=function({id:s,disabled:i,labelGetter:a,onChange:o,entityClient:l}){const[r,c]=n.useState(null);n.useEffect((()=>{s?r&&r.id===s?c({...r}):l instanceof t.EntityClientWithStub?l.loadSingleStub(s).then(c):l.loadSingle(s).then(c):c(null)}),[s]);const d=n.useCallback((e=>{const t=e?e.id:null;t!==s&&o(t),c(e)}),[s,o]);return e.jsx(h,{disabled:i,selected:r,labelGetter:a,entityClient:l,onChange:d})},exports.AutocompleteEntitySelect=h,exports.AutocompleteLookupIdSelect=function({id:t,disabled:s,labelGetter:i,onChange:a,lookupClient:o}){const[l,r]=n.useState(null);n.useEffect((()=>{t?l&&l.id===t?r({...l}):o.loadSingle(t).then(r):r(null)}),[t]);const c=n.useCallback((e=>{const n=e?e.id:null;n!==t&&a(n),r(e)}),[t,l]);return e.jsx(g,{disabled:s,selected:l,labelGetter:i,lookupClient:o,onChange:c})},exports.AutocompleteLookupSelect=g,exports.AutocompleteSelect=x,exports.CacheStatsControl=function({name:t,stats:n}){return e.jsxs("div",{children:[e.jsxs("div",{className:"d-flex align-items-center gap-2",children:[e.jsx("pre",{children:t}),e.jsxs("pre",{children:["[",n.cachedItems,n.capacity>0&&" / ",n.capacity>0&&n.capacity,"]"]})]}),n.capacity>0&&e.jsx("div",{className:"p-1",children:e.jsx(s.ProgressBar,{now:n.cachedItems,min:0,max:n.capacity})})]})},exports.ConfirmDialog=function({name:t,text:n,onClose:i,onConfirm:a}){return e.jsxs(s.Modal,{show:!0,backdrop:!0,onHide:i,children:[e.jsx(s.Modal.Header,{children:t||"Confirm"}),e.jsx(s.Modal.Body,{children:n}),e.jsx(s.Modal.Footer,{children:e.jsxs(s.Stack,{direction:"horizontal",children:[e.jsx(s.Button,{variant:"link",onClick:i,children:e.jsx(r,{text:"Back"})}),e.jsx(s.Button,{variant:"primary",onClick:a,children:e.jsx(r,{text:"Yes"})})]})})]})},exports.ConfirmDialogContext=z,exports.ConfirmDialogContextData=B,exports.DateInput=function({value:n,onChange:i,disabled:a}){return e.jsx(s.Form.Control,{type:"date",disabled:a,value:t.DateUtil.formatDateForInput(n),onChange:e=>{i(t.DateUtil.parseDate(e.target.value))}})},exports.DateTime=function({value:n}){return e.jsx("div",{className:"text-nowrap",children:t.DateUtil.formatDateTimeForHumans(n)})},exports.DateTimeInput=function({value:n,onChange:i,disabled:a}){return e.jsx(s.Form.Control,{type:"datetime-local",disabled:a,value:t.DateUtil.formatDateTimeForInput(n),onChange:e=>{i(t.DateUtil.parseDate(e.target.value))}})},exports.DeleteButton=function({disabled:t,icon:s,loading:a,children:o,size:l,onClick:r,isChanged:c}){const d=n.useMemo((()=>s||e.jsx(i.BsTrash,{})),[s]);return e.jsx(p,{disabled:t||!1===c,onClick:r,icon:d,loading:a,size:l,variant:"danger",children:o})},exports.Duration=S,exports.Elapsed=function({date:s}){const i=n.useMemo((()=>t.ObjectUtil.isEmpty(s)?null:Date.now()-s.getTime()),[s]);return e.jsx(S,{ms:i})},exports.EntityIdSelect=j,exports.EntitySelect=b,exports.EntityWithNameIdSelect=function({id:t,sort:n,disabled:s,onChange:i,options:a,showEmptyOption:o,emptyOptionLabel:l}){return e.jsx(j,{id:t,labelGetter:e=>e.name,disabled:s,sort:n,options:a,onChange:i,showEmptyOption:o,emptyOptionLabel:l})},exports.EntityWithNameSelect=function({value:t,sort:n,disabled:s,onChange:i,options:a,showEmptyOption:o,emptyOptionLabel:l}){return e.jsx(b,{value:t,labelGetter:e=>e.name,disabled:s,sort:n,options:a,onChange:i,showEmptyOption:o,emptyOptionLabel:l})},exports.EnumSelect=function({value:t,options:s,onChange:i,showEmptyOption:a,emptyOptionLabel:o}){const l=n.useMemo((()=>s?s.map((e=>({id:e,label:e}))):[]),[s]);return e.jsx(u,{value:t,options:l,onChange:i,showEmptyOption:a,emptyOptionLabel:o})},exports.FormRow=function({label:t,children:n}){return e.jsxs(s.Form.Group,{children:[e.jsx(s.Form.Label,{children:e.jsx(r,{text:t})}),e.jsx("div",{children:n})]})},exports.IconButton=d,exports.IconSwitch=function({disabled:t,checked:n,iconOn:i,iconOff:a,size:o,onChange:l}){return e.jsxs("div",{className:"d-flex align-items-center gap-2 cursor-pointer",onClick:e=>l(!n),children:[e.jsx(s.Form.Switch,{disabled:t,size:o,type:"switch",checked:n,readOnly:!0,className:"cursor-pointer"}),n?i:a]})},exports.JavaHeapControl=function({stats:n}){const i=n.heapSize,a=n.heapMaxSize,o=n.heapFreeSize,l=i-o;return e.jsxs("div",{children:[e.jsxs("div",{className:"d-flex align-items-center gap-2",children:[e.jsx("pre",{children:"Java Heap"}),e.jsxs("pre",{children:["[",t.ByteUtil.formatByteSize(i)," / ",t.ByteUtil.formatByteSize(a),"]"]})]}),e.jsxs("div",{className:"d-flex align-items-center gap-2",children:[e.jsx("pre",{children:"Used:"}),e.jsx(s.Badge,{className:"bg-warning text-bg-warning",children:t.ByteUtil.formatByteSize(l)}),e.jsx("pre",{children:"Free:"}),e.jsx(s.Badge,{className:"bg-success text-white",children:t.ByteUtil.formatByteSize(o)})]}),e.jsx("div",{className:"p-1",children:e.jsxs(s.ProgressBar,{min:0,max:a,children:[e.jsx(s.ProgressBar,{variant:"warning",min:0,now:l,max:a}),e.jsx(s.ProgressBar,{variant:"success",min:0,now:o,max:a})]})})]})},exports.LoadingButton=p,exports.LocalizationContext=l,exports.Localize=r,exports.LookupSelect=function({id:t,sort:s,disabled:i,labelGetter:a,onChange:o,options:l,showEmptyOption:r,emptyOptionLabel:c}){const d=n.useMemo((()=>{let e=[];return l&&(e=s?l.sort(((e,t)=>e.name>t.name?1:-1)):l),e.map((e=>({id:e.id,label:a?a(e):e.name})))}),[l]);return e.jsx(m,{disabled:i,value:t,options:d,onChange:o,showEmptyOption:r,emptyOptionLabel:c})},exports.NumberSelect=m,exports.QueueStateControl=E,exports.QueueStatsControl=function({name:t,stats:n}){const i=n?n.remaining+n.processed:void 0;return e.jsxs("div",{children:[e.jsxs("div",{className:"d-flex align-items-center gap-2",children:[e.jsx("pre",{children:t}),e.jsxs("pre",{children:["[",void 0!==n?.processed?n.processed:"?"," / ",void 0!==i?i:"?","]"]}),e.jsx(E,{state:n?n.state:"Unknown"})]}),e.jsx("div",{className:"p-1",children:n?e.jsx(s.ProgressBar,{variant:"primary",striped:!0,animated:!0,min:0,now:n.processed,max:i||1}):e.jsx(s.Placeholder,{className:"w-100",animation:"glow",children:e.jsx(s.Placeholder,{className:"w-100"})})})]})},exports.SaveButton=function({disabled:t,icon:s,loading:i,children:o,size:l,onClick:r,isChanged:c}){const d=n.useMemo((()=>s||e.jsx(a.FaFloppyDisk,{})),[s]),u=n.useMemo((()=>c?e.jsx("strong",{children:o}):o),[c,o]);return e.jsx(p,{disabled:t||!1===c,onClick:r,icon:d,loading:i,size:l,children:u})},exports.Spread=function({children:t,center:s}){const i=n.useMemo((()=>!1===s?"":"d-flex align-items-center justify-content-center"),[s]);return e.jsx("div",{className:`w-100 h-100 position-absolute ${i}`,style:{left:0,right:0,top:0,bottom:0},children:t})},exports.StringSelect=u,exports.Switch=function({id:i,label:a,disabled:o,checked:l,size:r,onChange:c}){const d=n.useMemo((()=>i||t.StringUtil.randomString()),[i]);return e.jsx(s.Form.Switch,{disabled:o,id:d,size:r,type:"switch",checked:l,onChange:e=>c(!l),className:"cursor-pointer",label:a})},exports.TablePagination=v,exports.TablePlaceholder=function({cols:t,rows:i,size:a}){const o=n.useMemo((()=>void 0===t?1:t),[t]),l=n.useMemo((()=>void 0===i?20:i),[i]);return n.useMemo((()=>void 0===a?"lg":a),[a]),e.jsx("div",{children:e.jsx(s.Table,{responsive:!0,children:e.jsx("tbody",{children:Array.from({length:l},((t,n)=>e.jsx("tr",{children:Array.from({length:o},((t,n)=>e.jsx("td",{children:e.jsx("div",{className:"w-100 p-1 m-1"})},n)))},n)))})})})},exports.TableWithSelect=function({showSelect:s,header:a,items:o,onSelect:l,onClick:r,totalItems:c,paging:d,onPagingChanged:p}){const[u,m]=n.useState(!1),[x,h]=n.useState(),g=n.useCallback((e=>{x&&h(x.map((t=>({selected:e,item:t.item})))),m(e)}),[x]),j=n.useMemo((()=>{const t=[...a];return!1!==s&&t.unshift({name:"",label:e.jsx("div",{className:"py-1",children:e.jsx(y,{checked:u,onChange:()=>g(!u),iconOn:e.jsx(i.BsCheckAll,{})})})}),t}),[a,u,g]);return n.useEffect((()=>{h(o?o.map((e=>({selected:u,item:e}))):void 0)}),[o]),n.useEffect((()=>{x&&l&&l(x.filter((e=>e.selected)).map((e=>e.item)))}),[x,l]),e.jsx(C,{header:j,hover:void 0!==r,paging:d,striped:!0,totalItems:c,onPagingChanged:p,children:x&&x.map(((n,i)=>e.jsxs("tr",{className:`selectable ${r?"cursor-pointer":""} ${n.selected?"table-active table-primary":""}`,onClick:e=>{r&&r(n.item)},children:[!1!==s&&e.jsx("td",{children:e.jsx("div",{className:"py-2 d-flex align-items-center",children:e.jsx(y,{checked:n.selected,onChange:()=>{n.selected=!n.selected,u&&!n.selected&&m(!1),h([...x])}})})}),a.map(((s,i)=>{const a=s.renderer||(o=s.name,e=>t.ObjectUtil.getNestedValue(e,o));var o;return e.jsx("td",{children:a(n.item)},i)}))]},i)))})},exports.TextInputWithReset=c,exports.UserAlertTypeIcon=k,exports.UserAlertWidget=N,exports.UserAlertsWidget=function({userAlerts:t}){const[a,l]=n.useState(!1),[r,c]=n.useState(t.alerts.length),[p,u]=n.useState([...t.visibleAlerts]),[m,x]=n.useState(t.getSummary()),h=n.useCallback((()=>{c(t.alerts.length),u(a?[...t.alerts]:[...t.visibleAlerts]),x(t.getSummary())}),[t,a]);return n.useEffect((()=>{t.addOnChangeHandler(h);const e=setInterval((()=>t.updateVisibility()),100);return()=>{clearInterval(e),t.removeOnChangeHandler(h)}}),[t,h]),r<=0?e.jsx(e.Fragment,{}):e.jsxs("div",{className:"user-alerts border rounded bg-body text-body position-fixed text-end",style:{bottom:15,right:15,zIndex:2147483647},children:[p.length>0&&e.jsx("div",{className:"max-w-50 p-2 border-bottom",children:p.map(((n,s)=>e.jsx(N,{userAlert:n,maxDurationMs:t.maxVisibilityMs},s)))}),e.jsx("div",{className:"p-2",children:e.jsxs(s.Stack,{direction:"horizontal",gap:2,className:"justify-content-end align-items-center",children:[a?e.jsx(d,{size:"sm",variant:"primary",onClick:()=>l(!1),icon:e.jsx(o.VscEyeClosed,{}),children:"Hide"}):e.jsx(d,{size:"sm",variant:"primary",onClick:()=>l(!0),icon:e.jsx(i.BsEye,{}),children:"Show All"}),Array.from(m.entries()).map(((t,n)=>e.jsxs(s.Stack,{direction:"horizontal",gap:1,className:"px-1 border rounded align-items-center",children:[e.jsx(k,{type:t[0],customVariant:0===t[1]?"muted":void 0}),e.jsx("div",{className:t[1]>0?`text-${t[0]} fw-bold`:"text-muted",children:t[1]})]},n))),e.jsx(d,{size:"sm",variant:"danger",onClick:()=>t.reset(),icon:e.jsx(i.BsTrash,{}),children:"Reset"})]})})]})};
|
|
1
|
+
"use strict";var e=require("react/jsx-runtime"),t=require("zavadil-ts-common"),n=require("react"),s=require("react-bootstrap"),i=require("react-icons/bs"),a=require("react-icons/fa6"),o=require("react-icons/vsc");const l=n.createContext(new t.BasicLocalization);function r({text:t,tag:s}){const i=n.useContext(l),a=n.useMemo((()=>{if(void 0!==s&&""!==s)return"string"==typeof s?{tags:[s]}:{tags:s}}),[s]),o=n.useMemo((()=>i.translate(t,a)),[i,t,a]);return e.jsx(e.Fragment,{children:o})}function c({value:a,onChange:o,onReset:l,onBlur:r,disabled:c,className:d}){const p=n.useMemo((()=>t.StringUtil.getNonEmpty(a)),[a]),u=n.useMemo((()=>t.StringUtil.isBlank(a)),[p]),m=n.useCallback((()=>{l?l():o("")}),[l,o]);return e.jsxs(s.InputGroup,{className:d,children:[e.jsx(s.Form.Control,{type:"text",disabled:c,value:p,onChange:e=>o(e.target.value),onBlur:r}),e.jsx(s.Button,{onClick:m,disabled:u,children:e.jsx("div",{className:"d-flex align-items-center",children:e.jsx(i.BsXCircle,{})})})]})}function d({disabled:t,variant:n,icon:i,size:a,children:o,type:l,onClick:r}){return e.jsx(s.Button,{disabled:!0===t,size:a,onClick:r,variant:n,type:l,children:e.jsxs("div",{className:"d-flex align-items-center gap-2",children:[i,o&&e.jsx("div",{children:o})]})})}function p({disabled:t,icon:n,loading:i,children:a,size:o,variant:l,type:r,onClick:c}){return!0===i?e.jsx(d,{disabled:!0,onClick:c,size:o,variant:l,type:r,icon:e.jsx(s.Spinner,{size:"sm"}),children:a}):e.jsx(d,{disabled:t,onClick:c,icon:n,size:o,variant:l,children:a})}function u({value:i,options:a,disabled:o,onChange:l,showEmptyOption:r,emptyOptionLabel:c}){return n.useEffect((()=>{t.StringUtil.isBlank(i)&&a.length>0&&!0!==r&&l(a[0].id)}),[i,a,r,l]),e.jsxs(s.Form.Select,{value:i||"",onChange:e=>l(e.target.value),disabled:o,children:[!0===r&&e.jsx("option",{value:"",children:c||""},""),a?a.map(((t,n)=>e.jsx("option",{value:t.id||"",children:t.label||""},n))):e.jsx("span",{children:e.jsx(s.Spinner,{})})]})}function m({value:s,options:i,disabled:a,onChange:o,showEmptyOption:l,emptyOptionLabel:r}){const c=n.useMemo((()=>s?String(s):""),[s]),d=n.useMemo((()=>i?i.map((e=>({id:e.id?String(e.id):"",label:e.label}))):[]),[i]),p=n.useCallback((e=>o(t.NumberUtil.parseNumber(e))),[o]);return e.jsx(u,{disabled:a,value:c,options:d,onChange:p,showEmptyOption:l,emptyOptionLabel:r})}function x({selected:i,disabled:a,labelGetter:o,onChange:l,onSearch:r}){const[d,p]=n.useState(),[u,m]=n.useState(),[x,h]=n.useState(),g=n.useRef(),j=n.useCallback((e=>o?o(e):"name"in e&&"string"==typeof e.name?e.name:`[${e.id}]`),[o]),b=n.useMemo((()=>i?"border rounded border-primary":void 0),[i]),v=n.useCallback((()=>{console.log("user left control"),x&&(h(void 0),m(i?j(i):""))}),[l,x,i,j]),f=n.useCallback((()=>{g.current=window.setTimeout(v,100)}),[g,v]),C=n.useCallback((()=>{g.current&&clearTimeout(g.current)}),[g]);n.useEffect((()=>C),[]),n.useEffect((()=>{m(i?j(i):""),d&&(d.cancel(),p(void 0)),h(void 0)}),[i]);const y=n.useCallback((()=>{l(null),m(""),d&&(d.cancel(),p(void 0)),h(void 0)}),[l,d]),S=n.useCallback((e=>{m(e),d&&d.cancel();const n=new t.CancellablePromise(r(e));n.promise.then(h),p(n)}),[d,r]),w=n.useCallback((e=>{console.log("user selected item"),h(void 0),l({...e})}),[l]);return e.jsx("div",{onBlur:f,onFocus:C,children:e.jsxs(s.Dropdown,{defaultShow:!1,show:null!==x,children:[e.jsx(c,{disabled:a,value:u,onChange:S,onReset:y,className:b}),x&&e.jsx(s.Dropdown.Menu,{children:x.map((t=>e.jsx(s.Dropdown.Item,{onClick:e=>{C(),w(t)},active:t.id===i?.id,children:j(t)},t.id)))})]})})}function h({selected:s,disabled:i,labelGetter:a,onChange:o,entityClient:l}){const r=n.useCallback((e=>l.loadPage({search:t.StringUtil.safeLowercase(e),page:0,size:10,sorting:[{name:"id"}]}).then((e=>e.content))),[a]);return e.jsx(x,{disabled:i,selected:s,labelGetter:a,onSearch:r,onChange:o})}function g({selected:s,disabled:i,labelGetter:a,onChange:o,lookupClient:l}){const r=n.useMemo((()=>a||(e=>e.name)),[a]),c=n.useCallback((e=>l.loadPage({search:t.StringUtil.safeLowercase(e),page:0,size:10,sorting:[{name:"name"}]}).then((e=>e.content))),[a]);return e.jsx(x,{disabled:i,selected:s,labelGetter:r,onSearch:c,onChange:o})}function j({id:t,sort:s,disabled:i,labelGetter:a,onChange:o,options:l,showEmptyOption:r,emptyOptionLabel:c}){const d=n.useMemo((()=>{let e=[];return l&&(e=s?l.sort(((e,t)=>a(e)>a(t)?1:-1)):l),e.map((e=>({id:e.id,label:a(e)})))}),[l]);return e.jsx(m,{disabled:i,value:t,options:d,onChange:o,showEmptyOption:r,emptyOptionLabel:c})}function b({value:t,sort:n,disabled:s,labelGetter:i,onChange:a,options:o,showEmptyOption:l,emptyOptionLabel:r}){return e.jsx(j,{disabled:s,id:t?t.id:null,options:o,sort:n,onChange:e=>{a(o&&e?o.find((t=>t.id===e)):void 0)},labelGetter:i,showEmptyOption:l,emptyOptionLabel:r})}function v({paging:n,totalItems:i,onPagingChanged:a}){const o=Math.ceil(i/n.size),l=e=>{n.page=e,a(t.ObjectUtil.clone(n))},r=[];if(o>1){r.push(e.jsx(s.Pagination.First,{onClick:()=>l(0),disabled:0===n.page},"first")),r.push(e.jsx(s.Pagination.Prev,{onClick:()=>l(n.page-1),disabled:0===n.page},"prev"));const t=Math.round(3.5);let i=n.page>t?n.page-t:0,a=i+10;a>=o&&(a=o-1),i>0&&r.push(e.jsx(s.Pagination.Ellipsis,{disabled:!0},"ellipsisStart"));for(let t=i;t<=a;t++)r.push(e.jsx(s.Pagination.Item,{active:t===n.page,onClick:()=>l(t),children:t+1},t));a<o-1&&r.push(e.jsx(s.Pagination.Ellipsis,{disabled:!0},"ellipsisEnd")),r.push(e.jsx(s.Pagination.Next,{onClick:()=>l(n.page+1),disabled:n.page===o-1},"next")),r.push(e.jsx(s.Pagination.Last,{onClick:()=>l(o-1),disabled:n.page===o-1},"last"))}return e.jsx(s.Pagination,{size:"sm",className:"flex-wrap m-0",children:r})}const f=[{id:10,label:"10"},{id:100,label:"100"},{id:1e3,label:"1000"}];function C({hover:a,showPagingOnBottom:o,showPageSizeSelection:l,striped:c,bordered:d,header:p,children:u,paging:x,totalItems:h,onPagingChanged:g}){const j=Math.ceil(h/x.size),b=n.useMemo((()=>{const e=x.size;if(null===f.find((t=>t.id===e))){const n=t.ObjectUtil.clone(f);return n.push({id:e,label:String(e)}),n}return f}),[x]);return e.jsx("div",{children:e.jsxs(s.Table,{hover:a,striped:c,responsive:!0,bordered:d,children:[e.jsxs("thead",{children:[e.jsx("tr",{children:e.jsx("td",{colSpan:p.length,children:e.jsxs("div",{className:"d-flex justify-content-between align-items-center gap-2",children:[e.jsxs("div",{children:[e.jsx(r,{text:"Page"}),": ",x.page+1," / ",j]}),j>0&&e.jsx(v,{paging:x,totalItems:h,onPagingChanged:g}),e.jsxs("div",{children:[e.jsx(r,{text:"Total items"}),": ",h]})]})})}),e.jsx("tr",{children:p.map(((n,s)=>{const a=!1===n.sort?"":t.StringUtil.isBlank(n.sort)?n.name:n.sort;if(t.StringUtil.isBlank(a)||!a)return e.jsx("th",{children:n.label},s);const o=x.sorting&&x.sorting.find((e=>e.name===a));return e.jsxs("th",{className:"user-select-none text-nowrap",role:"button",onClick:e=>((e,n)=>{x.sorting||(x.sorting=[]);let s=x.sorting.find((e=>e.name===n));const i=s&&1===x.sorting.length;e.ctrlKey||i||(x.sorting=[],s=void 0),s?s.desc=!s.desc:x.sorting.push({name:n}),g(t.ObjectUtil.clone(x))})(e,a),children:[n.label,o?o.desc?e.jsx(i.BsFillCaretDownFill,{}):e.jsx(i.BsFillCaretUpFill,{}):e.jsx(e.Fragment,{})]},s)}))})]}),e.jsx("tbody",{children:u}),h>0&&e.jsxs("tfoot",{children:[o&&e.jsx("tr",{children:e.jsx("td",{colSpan:p.length,children:e.jsxs("div",{className:"d-flex justify-content-between align-items-center gap-2",children:[e.jsxs("div",{children:[e.jsx(r,{text:"Page"}),": ",x.page+1," / ",j]}),j>0&&e.jsx(v,{paging:x,totalItems:h,onPagingChanged:g}),e.jsxs("div",{children:[e.jsx(r,{text:"Total items"}),": ",h]})]})})}),l&&e.jsx("tr",{children:e.jsx("td",{colSpan:p.length,children:e.jsxs("div",{className:"d-flex align-items-center gap-2 justify-content-end",children:[e.jsxs("div",{className:"text-nowrap",children:[e.jsx(r,{text:"Page size"}),":"]}),e.jsx("div",{children:e.jsx(m,{value:x.size,options:b,onChange:e=>{x.size=e||10,g({...x})},showEmptyOption:!1})})]})})})]})]})})}function y({disabled:t,checked:s,iconOn:a,iconOff:o,size:l,onChange:r}){const c=n.useMemo((()=>s?a||e.jsx(i.BsCheckCircle,{size:l}):o||e.jsx(i.BsCircle,{size:l,className:"text-muted"})),[s,a,o,l]);return e.jsx("div",{className:"d-flex align-items-center cursor-pointer",onClick:e=>{e.stopPropagation(),e.preventDefault(),r(!s)},children:c})}function S({ms:n}){return t.ObjectUtil.isEmpty(n)?e.jsx(e.Fragment,{}):e.jsx("div",{className:"text-nowrap",children:t.DateUtil.formatDuration(n)})}const w=new Map([[t.UserAlertType.error,i.BsBug],[t.UserAlertType.warning,i.BsExclamationDiamond],[t.UserAlertType.info,i.BsInfo]]);function k({type:t,size:n,customVariant:s}){const a=w.get(t)||i.BsQuestion;return e.jsx("div",{className:`d-flex align-items-center text-${void 0===s?t:s}`,children:a({size:n})})}function N({userAlert:n,maxDurationMs:i}){return e.jsxs(s.Stack,{direction:"horizontal",gap:2,className:"align-items-center",children:[n.remainsMs&&e.jsx("div",{style:{width:20},children:e.jsx(s.ProgressBar,{min:0,max:i,now:n.remainsMs,variant:n.type})}),e.jsx("div",{children:t.DateUtil.formatDateForHumans(n.time)}),e.jsx(k,{type:n.type}),e.jsx("div",{children:n.message})]})}class B{constructor(e){this.setProps=e}confirm(e,t,n){this.setProps({name:e,text:t,onConfirm:()=>{n(),this.setProps(void 0)},onClose:()=>this.setProps(void 0)})}}const z=n.createContext(new B((()=>{})));const O=new Map([["Idle","secondary"],["Processing","success"],["Loading","warn"]]);function E({state:t}){const n=O.get(t)||"light";return e.jsx(s.Badge,{className:`bg-${n} text-bg-${n}`,children:t})}exports.AdvancedTable=C,exports.AutocompleteEntityIdSelect=function({id:s,disabled:i,labelGetter:a,onChange:o,entityClient:l}){const[r,c]=n.useState(null);n.useEffect((()=>{s?r&&r.id===s?c({...r}):l instanceof t.EntityClientWithStub?l.loadSingleStub(s).then(c):l.loadSingle(s).then(c):c(null)}),[s]);const d=n.useCallback((e=>{const t=e?e.id:null;t!==s&&o(t),c(e)}),[s,o]);return e.jsx(h,{disabled:i,selected:r,labelGetter:a,entityClient:l,onChange:d})},exports.AutocompleteEntitySelect=h,exports.AutocompleteLookupIdSelect=function({id:t,disabled:s,labelGetter:i,onChange:a,lookupClient:o}){const[l,r]=n.useState(null);n.useEffect((()=>{t?l&&l.id===t?r({...l}):o.loadSingle(t).then(r):r(null)}),[t]);const c=n.useCallback((e=>{const n=e?e.id:null;n!==t&&a(n),r(e)}),[t,l]);return e.jsx(g,{disabled:s,selected:l,labelGetter:i,lookupClient:o,onChange:c})},exports.AutocompleteLookupSelect=g,exports.AutocompleteSelect=x,exports.CacheStatsControl=function({name:t,stats:n}){return e.jsxs("div",{children:[e.jsxs("div",{className:"d-flex align-items-center gap-2",children:[e.jsx("pre",{children:t}),e.jsxs("pre",{children:["[",n.cachedItems,n.capacity>0&&" / ",n.capacity>0&&n.capacity,"]"]})]}),n.capacity>0&&e.jsx("div",{className:"p-1",children:e.jsx(s.ProgressBar,{now:n.cachedItems,min:0,max:n.capacity})})]})},exports.ConfirmDialog=function({name:t,text:n,onClose:i,onConfirm:a}){return e.jsxs(s.Modal,{show:!0,backdrop:!0,onHide:i,children:[e.jsx(s.Modal.Header,{children:t||"Confirm"}),e.jsx(s.Modal.Body,{children:n}),e.jsx(s.Modal.Footer,{children:e.jsxs(s.Stack,{direction:"horizontal",children:[e.jsx(s.Button,{variant:"link",onClick:i,children:e.jsx(r,{text:"Back"})}),e.jsx(s.Button,{variant:"primary",onClick:a,children:e.jsx(r,{text:"Yes"})})]})})]})},exports.ConfirmDialogContext=z,exports.ConfirmDialogContextData=B,exports.DateInput=function({value:n,onChange:i,disabled:a}){return e.jsx(s.Form.Control,{type:"date",disabled:a,value:t.DateUtil.formatDateForInput(n),onChange:e=>{i(t.DateUtil.parseDate(e.target.value))}})},exports.DateTime=function({value:n}){return e.jsx("div",{className:"text-nowrap",children:t.DateUtil.formatDateTimeForHumans(n)})},exports.DateTimeInput=function({value:n,onChange:i,disabled:a}){return e.jsx(s.Form.Control,{type:"datetime-local",disabled:a,value:t.DateUtil.formatDateTimeForInput(n),onChange:e=>{i(t.DateUtil.parseDate(e.target.value))}})},exports.DeleteButton=function({disabled:t,icon:s,loading:a,children:o,size:l,onClick:r,isChanged:c}){const d=n.useMemo((()=>s||e.jsx(i.BsTrash,{})),[s]);return e.jsx(p,{disabled:t||!1===c,onClick:r,icon:d,loading:a,size:l,variant:"danger",children:o})},exports.Duration=S,exports.Elapsed=function({date:s}){const i=n.useMemo((()=>t.ObjectUtil.isEmpty(s)?null:Date.now()-s.getTime()),[s]);return e.jsx(S,{ms:i})},exports.EntityIdSelect=j,exports.EntitySelect=b,exports.EntityWithNameIdSelect=function({id:t,sort:n,disabled:s,onChange:i,options:a,showEmptyOption:o,emptyOptionLabel:l}){return e.jsx(j,{id:t,labelGetter:e=>e.name,disabled:s,sort:n,options:a,onChange:i,showEmptyOption:o,emptyOptionLabel:l})},exports.EntityWithNameSelect=function({value:t,sort:n,disabled:s,onChange:i,options:a,showEmptyOption:o,emptyOptionLabel:l}){return e.jsx(b,{value:t,labelGetter:e=>e.name,disabled:s,sort:n,options:a,onChange:i,showEmptyOption:o,emptyOptionLabel:l})},exports.EnumSelect=function({value:t,options:s,onChange:i,showEmptyOption:a,emptyOptionLabel:o}){const l=n.useMemo((()=>s?s.map((e=>({id:e,label:e}))):[]),[s]);return e.jsx(u,{value:t,options:l,onChange:i,showEmptyOption:a,emptyOptionLabel:o})},exports.FormRow=function({label:t,children:n}){return e.jsxs(s.Form.Group,{children:[e.jsx(s.Form.Label,{children:e.jsx(r,{text:t})}),e.jsx("div",{children:n})]})},exports.IconButton=d,exports.IconSwitch=function({disabled:t,checked:n,iconOn:i,iconOff:a,size:o,onChange:l}){return e.jsxs("div",{className:"d-flex align-items-center gap-2 cursor-pointer",onClick:e=>l(!n),children:[e.jsx(s.Form.Switch,{disabled:t,size:o,type:"switch",checked:n,readOnly:!0,className:"cursor-pointer"}),n?i:a]})},exports.JavaHeapControl=function({stats:n}){const i=n.heapSize,a=n.heapMaxSize,o=n.heapFreeSize,l=i-o;return e.jsxs("div",{children:[e.jsxs("div",{className:"d-flex align-items-center gap-2",children:[e.jsx("pre",{children:"Java Heap"}),e.jsxs("pre",{children:["[",t.ByteUtil.formatByteSize(i)," / ",t.ByteUtil.formatByteSize(a),"]"]})]}),e.jsxs("div",{className:"d-flex align-items-center gap-2",children:[e.jsx("pre",{children:"Used:"}),e.jsx(s.Badge,{className:"bg-warning text-bg-warning",children:t.ByteUtil.formatByteSize(l)}),e.jsx("pre",{children:"Free:"}),e.jsx(s.Badge,{className:"bg-success text-white",children:t.ByteUtil.formatByteSize(o)})]}),e.jsx("div",{className:"p-1",children:e.jsxs(s.ProgressBar,{min:0,max:a,children:[e.jsx(s.ProgressBar,{variant:"warning",min:0,now:l,max:a}),e.jsx(s.ProgressBar,{variant:"success",min:0,now:o,max:a})]})})]})},exports.LoadingButton=p,exports.LocalizationContext=l,exports.Localize=r,exports.LookupSelect=function({id:t,sort:s,disabled:i,labelGetter:a,onChange:o,options:l,showEmptyOption:r,emptyOptionLabel:c}){const d=n.useMemo((()=>{let e=[];return l&&(e=s?l.sort(((e,t)=>e.name>t.name?1:-1)):l),e.map((e=>({id:e.id,label:a?a(e):e.name})))}),[l]);return e.jsx(m,{disabled:i,value:t,options:d,onChange:o,showEmptyOption:r,emptyOptionLabel:c})},exports.NumberSelect=m,exports.QueueStateControl=E,exports.QueueStatsControl=function({name:t,stats:n}){const i=n?n.remaining+n.processed:void 0;return e.jsxs("div",{children:[e.jsxs("div",{className:"d-flex align-items-center gap-2",children:[e.jsx("pre",{children:t}),e.jsxs("pre",{children:["[",void 0!==n?.processed?n.processed:"?"," / ",void 0!==i?i:"?","]"]}),e.jsx(E,{state:n?n.state:"Unknown"})]}),e.jsx("div",{className:"p-1",children:n?e.jsx(s.ProgressBar,{variant:"primary",striped:!0,animated:!0,min:0,now:n.processed,max:i||1}):e.jsx(s.Placeholder,{className:"w-100",animation:"glow",children:e.jsx(s.Placeholder,{className:"w-100"})})})]})},exports.SaveButton=function({disabled:t,icon:s,loading:i,children:o,size:l,onClick:r,isChanged:c}){const d=n.useMemo((()=>s||e.jsx(a.FaFloppyDisk,{})),[s]),u=n.useMemo((()=>c?e.jsx("strong",{children:o}):o),[c,o]);return e.jsx(p,{disabled:t||!1===c,onClick:r,icon:d,loading:i,size:l,children:u})},exports.Spread=function({children:t,center:s}){const i=n.useMemo((()=>!1===s?"":"d-flex align-items-center justify-content-center"),[s]);return e.jsx("div",{className:`w-100 h-100 position-absolute ${i}`,style:{left:0,right:0,top:0,bottom:0},children:t})},exports.StringSelect=u,exports.Switch=function({id:i,label:a,disabled:o,checked:l,size:r,onChange:c}){const d=n.useMemo((()=>i||t.StringUtil.randomString()),[i]);return e.jsx(s.Form.Switch,{disabled:o,id:d,size:r,type:"switch",checked:l,onChange:e=>c(!l),className:"cursor-pointer",label:a})},exports.TablePagination=v,exports.TablePlaceholder=function({cols:t,rows:i,size:a}){const o=n.useMemo((()=>void 0===t?1:t),[t]),l=n.useMemo((()=>void 0===i?20:i),[i]);return n.useMemo((()=>void 0===a?"lg":a),[a]),e.jsx("div",{children:e.jsx(s.Table,{responsive:!0,children:e.jsx("tbody",{children:Array.from({length:l},((t,n)=>e.jsx("tr",{children:Array.from({length:o},((t,n)=>e.jsx("td",{children:e.jsx("div",{className:"w-100 p-1 m-1"})},n)))},n)))})})})},exports.TableWithSelect=function({showSelect:s,header:a,items:o,onSelect:l,onClick:r,totalItems:c,paging:d,onPagingChanged:p}){const[u,m]=n.useState(!1),[x,h]=n.useState(),g=n.useCallback((e=>{x&&h(x.map((t=>({selected:e,item:t.item})))),m(e)}),[x]),j=n.useMemo((()=>{const t=[...a];return!1!==s&&t.unshift({name:"",label:e.jsx("div",{className:"py-1",children:e.jsx(y,{checked:u,onChange:()=>g(!u),iconOn:e.jsx(i.BsCheckAll,{})})})}),t}),[a,u,g]);return n.useEffect((()=>{h(o?o.map((e=>({selected:u,item:e}))):void 0)}),[o]),n.useEffect((()=>{x&&l&&l(x.filter((e=>e.selected)).map((e=>e.item)))}),[x,l]),e.jsx(C,{header:j,hover:void 0!==r,paging:d,striped:!0,totalItems:c,onPagingChanged:p,children:x&&x.map(((n,i)=>e.jsxs("tr",{className:`selectable ${r?"cursor-pointer":""} ${n.selected?"table-active table-primary":""}`,onClick:e=>{r&&r(n.item)},children:[!1!==s&&e.jsx("td",{children:e.jsx("div",{className:"py-2 d-flex align-items-center",children:e.jsx(y,{checked:n.selected,onChange:()=>{n.selected=!n.selected,u&&!n.selected&&m(!1),h([...x])}})})}),a.map(((s,i)=>{const a=s.renderer||(o=s.name,e=>t.ObjectUtil.getNestedValue(e,o));var o;return e.jsx("td",{children:a(n.item)},i)}))]},i)))})},exports.TextInputWithReset=c,exports.UserAlertTypeIcon=k,exports.UserAlertWidget=N,exports.UserAlertsWidget=function({userAlerts:t}){const[a,l]=n.useState(!1),[r,c]=n.useState(t.alerts.length),[p,u]=n.useState([...t.visibleAlerts]),[m,x]=n.useState(t.getSummary()),h=n.useCallback((()=>{c(t.alerts.length),u(a?[...t.alerts]:[...t.visibleAlerts]),x(t.getSummary())}),[t,a]);return n.useEffect((()=>{t.addOnChangeHandler(h);const e=setInterval((()=>t.updateVisibility()),100);return()=>{clearInterval(e),t.removeOnChangeHandler(h)}}),[t,h]),r<=0?e.jsx(e.Fragment,{}):e.jsxs("div",{className:"user-alerts border rounded bg-body text-body position-fixed text-end",style:{bottom:15,right:15,zIndex:2147483647},children:[p.length>0&&e.jsx("div",{className:"max-w-50 p-2 border-bottom",children:p.map(((n,s)=>e.jsx(N,{userAlert:n,maxDurationMs:t.maxVisibilityMs},s)))}),e.jsx("div",{className:"p-2",children:e.jsxs(s.Stack,{direction:"horizontal",gap:2,className:"justify-content-end align-items-center",children:[a?e.jsx(d,{size:"sm",variant:"primary",onClick:()=>l(!1),icon:e.jsx(o.VscEyeClosed,{}),children:"Hide"}):e.jsx(d,{size:"sm",variant:"primary",onClick:()=>l(!0),icon:e.jsx(i.BsEye,{}),children:"Show All"}),Array.from(m.entries()).map(((t,n)=>e.jsxs(s.Stack,{direction:"horizontal",gap:1,className:"px-1 border rounded align-items-center",children:[e.jsx(k,{type:t[0],customVariant:0===t[1]?"muted":void 0}),e.jsx("div",{className:t[1]>0?`text-${t[0]} fw-bold`:"text-muted",children:t[1]})]},n))),e.jsx(d,{size:"sm",variant:"danger",onClick:()=>t.reset(),icon:e.jsx(i.BsTrash,{}),children:"Reset"})]})})]})};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/component/localization/LocalizationContext.ts","../src/component/localization/Localize.tsx","../src/component/forms/TextInputWithReset.tsx","../src/component/forms/IconButton.tsx","../src/component/forms/LoadingButton.tsx","../src/component/forms/StringSelect.tsx","../src/component/forms/NumberSelect.tsx","../src/component/forms/AutocompleteSelect.tsx","../src/component/forms/AutocompleteEntitySelect.tsx","../src/component/forms/AutocompleteLookupSelect.tsx","../src/component/forms/EntityIdSelect.tsx","../src/component/forms/EntitySelect.tsx","../src/component/tables/TablePagination.tsx","../src/component/tables/AdvancedTable.tsx","../src/component/forms/IconCheck.tsx","../src/component/datetime/Duration.tsx","../src/component/alerts/UserAlertTypeIcon.tsx","../src/component/alerts/UserAlertWidget.tsx","../src/component/dialogs/ConfirmDialog.tsx","../src/component/stats/QueueStateControl.tsx","../src/component/forms/AutocompleteEntityIdSelect.tsx","../src/component/forms/AutocompleteLookupIdSelect.tsx","../src/component/stats/CacheStatsControl.tsx","../src/component/forms/DateInput.tsx","../src/component/datetime/DateTime.tsx","../src/component/forms/DateTimeInput.tsx","../src/component/forms/DeleteButton.tsx","../src/component/datetime/Elapsed.tsx","../src/component/forms/EntityWithNameIdSelect.tsx","../src/component/forms/EntityWithNameSelect.tsx","../src/component/forms/EnumSelect.tsx","../src/component/forms/FormRow.tsx","../src/component/forms/IconSwitch.tsx","../src/component/stats/JavaHeapControl.tsx","../src/component/forms/LookupSelect.tsx","../src/component/stats/QueueStatsControl.tsx","../src/component/forms/SaveButton.tsx","../src/component/Spread.tsx","../src/component/forms/Switch.tsx","../src/component/tables/TablePlaceholder.tsx","../src/component/tables/TableWithSelect.tsx","../src/component/alerts/UserAlertsWidget.tsx"],"sourcesContent":["import {createContext} from \"react\";\nimport {BasicLocalization, Localization} from \"zavadil-ts-common\";\n\nexport const LocalizationContext = createContext<Localization>(new BasicLocalization());\n","import {useContext, useMemo} from \"react\";\r\nimport {LocalizationContext} from \"./LocalizationContext\";\r\nimport {TranslateParams} from \"zavadil-ts-common\";\r\n\r\nexport type LocalizeProps = {\r\n\ttext: string;\r\n\ttag?: string | Array<string>;\r\n};\r\n\r\nexport function Localize({text, tag}: LocalizeProps) {\r\n\tconst localization = useContext(LocalizationContext);\r\n\r\n\tconst p: TranslateParams | undefined = useMemo(\r\n\t\t() => {\r\n\t\t\tif (tag === undefined || tag === '') return undefined;\r\n\t\t\tif (typeof tag === 'string') return {tags: [tag]};\r\n\t\t\treturn {tags: tag};\r\n\t\t},\r\n\t\t[tag]\r\n\t);\r\n\r\n\tconst t = useMemo(\r\n\t\t() => localization.translate(text, p),\r\n\t\t[localization, text, p]\r\n\t);\r\n\treturn <>{t}</>;\r\n}\r\n\r\nexport default Localize;\r\n","import {StringUtil} from 'zavadil-ts-common';\r\nimport {Button, Form, InputGroup} from \"react-bootstrap\";\r\nimport {BsXCircle} from \"react-icons/bs\";\r\nimport {useCallback, useMemo} from \"react\";\r\n\r\nexport type TextInputWithResetProps = {\r\n\tvalue?: string | null;\r\n\tonChange: (s: string) => any;\r\n\tonReset?: () => any;\r\n\tdisabled?: boolean;\r\n\tonBlur?: () => any;\r\n\tclassName?: string;\r\n};\r\n\r\nexport function TextInputWithReset({value, onChange, onReset, onBlur, disabled, className}: TextInputWithResetProps) {\r\n\tconst actual = useMemo(\r\n\t\t() => StringUtil.getNonEmpty(value),\r\n\t\t[value]\r\n\t);\r\n\r\n\tconst isEmpty = useMemo(\r\n\t\t() => StringUtil.isBlank(value),\r\n\t\t[actual]\r\n\t);\r\n\r\n\tconst reset = useCallback(\r\n\t\t() => {\r\n\t\t\tif (onReset) {\r\n\t\t\t\tonReset();\r\n\t\t\t} else {\r\n\t\t\t\tonChange('');\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onReset, onChange]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<InputGroup className={className}>\r\n\t\t\t<Form.Control\r\n\t\t\t\ttype=\"text\"\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\tvalue={actual}\r\n\t\t\t\tonChange={(e) => onChange(e.target.value)}\r\n\t\t\t\tonBlur={onBlur}\r\n\t\t\t/>\r\n\t\t\t<Button onClick={reset} disabled={isEmpty}>\r\n\t\t\t\t<div className=\"d-flex align-items-center\">\r\n\t\t\t\t\t<BsXCircle/>\r\n\t\t\t\t</div>\r\n\t\t\t</Button>\r\n\t\t</InputGroup>\r\n\t);\r\n}\r\n\r\nexport default TextInputWithReset;\r\n","import {Button} from \"react-bootstrap\";\r\nimport {PropsWithChildren, ReactNode} from \"react\";\r\nimport {ButtonVariant} from \"react-bootstrap/types\";\r\n\r\nexport type IconButtonProps = {\r\n\tdisabled?: boolean;\r\n\tonClick: () => any;\r\n\tsize?: \"sm\" | \"lg\";\r\n\ticon?: ReactNode;\r\n\tvariant?: ButtonVariant;\r\n};\r\n\r\nexport function IconButton({disabled, variant, icon, size, children, onClick}: PropsWithChildren<IconButtonProps>) {\r\n\treturn (\r\n\t\t<Button disabled={disabled === true} size={size} onClick={onClick} variant={variant}>\r\n\t\t\t<div className=\"d-flex align-items-center gap-2\">\r\n\t\t\t\t{icon}\r\n\t\t\t\t{\r\n\t\t\t\t\tchildren && <div>{children}</div>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</Button>\r\n\t);\r\n}\r\n\r\nexport default IconButton;\r\n","import {Spinner} from \"react-bootstrap\";\r\nimport {PropsWithChildren} from \"react\";\r\nimport {IconButton, IconButtonProps} from \"./IconButton\";\r\n\r\nexport type ActiveButtonProps = IconButtonProps & {\r\n\tloading?: boolean;\r\n};\r\n\r\nexport function LoadingButton({disabled, icon, loading, children, size, variant, onClick}: PropsWithChildren<ActiveButtonProps>) {\r\n\treturn (\r\n\t\t(loading === true) ?\r\n\t\t\t<IconButton disabled={true} onClick={onClick} size={size} variant={variant} icon={<Spinner size=\"sm\"/>}>{children}</IconButton>\r\n\t\t\t: <IconButton disabled={disabled} onClick={onClick} icon={icon} size={size} variant={variant}>{children}</IconButton>\r\n\t);\r\n}\r\n\r\nexport default LoadingButton;\r\n","import {Form, Spinner} from \"react-bootstrap\";\r\nimport {StringUtil} from \"zavadil-ts-common\";\r\nimport {useEffect} from \"react\";\r\n\r\nexport type GenericSelectOption<T> = {\r\n\tid?: T | null;\r\n\tlabel: string;\r\n}\r\n\r\nexport type GenericSelectProps<T> = {\r\n\tvalue?: T | null;\r\n\toptions: Array<GenericSelectOption<T>>;\r\n\tonChange: (id: T | null | undefined) => any;\r\n\tshowEmptyOption?: boolean;\r\n\tdisabled?: boolean;\r\n\temptyOptionLabel?: string;\r\n}\r\n\r\nexport type StringSelectProps = GenericSelectProps<string>;\r\n\r\nexport function StringSelect({value, options, disabled, onChange, showEmptyOption, emptyOptionLabel}: StringSelectProps) {\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\tif (StringUtil.isBlank(value)) {\r\n\t\t\t\tif (options.length > 0 && showEmptyOption !== true) {\r\n\t\t\t\t\tonChange(options[0].id);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t[value, options, showEmptyOption, onChange]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Form.Select\r\n\t\t\tvalue={value || ''}\r\n\t\t\tonChange={(e) => onChange(e.target.value)}\r\n\t\t\tdisabled={disabled}\r\n\t\t>\r\n\t\t\t{\r\n\t\t\t\t(showEmptyOption === true) && (\r\n\t\t\t\t\t<option key={\"\"} value={\"\"}>{emptyOptionLabel || ''}</option>\r\n\t\t\t\t)\r\n\t\t\t}\r\n\t\t\t{\r\n\t\t\t\toptions ?\r\n\t\t\t\t\toptions.map(\r\n\t\t\t\t\t\t(o, i) => <option key={i} value={o.id || ''}>{o.label || ''}</option>\r\n\t\t\t\t\t) : <span><Spinner/></span>\r\n\t\t\t}\r\n\t\t</Form.Select>\r\n\t)\r\n}\r\n","import {useCallback, useMemo} from \"react\";\r\nimport {NumberUtil} from \"zavadil-ts-common\";\r\nimport {GenericSelectProps, StringSelect} from \"./StringSelect\";\r\n\r\nexport type NumberSelectProps = GenericSelectProps<number>;\r\n\r\nexport function NumberSelect({value, options, disabled, onChange, showEmptyOption, emptyOptionLabel}: NumberSelectProps) {\r\n\tconst nValue = useMemo(\r\n\t\t() => {\r\n\t\t\tif (!value) return '';\r\n\t\t\treturn String(value);\r\n\t\t},\r\n\t\t[value]\r\n\t);\r\n\r\n\tconst nOptions = useMemo(\r\n\t\t() => {\r\n\t\t\tif (!options) return [];\r\n\t\t\treturn options.map(\r\n\t\t\t\t(o) => {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tid: o.id ? String(o.id) : '',\r\n\t\t\t\t\t\tlabel: o.label\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t},\r\n\t\t[options]\r\n\t);\r\n\r\n\tconst nChange = useCallback(\r\n\t\t(s: string | null | undefined) => onChange(NumberUtil.parseNumber(s)),\r\n\t\t[onChange]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<StringSelect\r\n\t\t\tdisabled={disabled}\r\n\t\t\tvalue={nValue}\r\n\t\t\toptions={nOptions}\r\n\t\t\tonChange={nChange}\r\n\t\t\tshowEmptyOption={showEmptyOption}\r\n\t\t\temptyOptionLabel={emptyOptionLabel}\r\n\t\t/>\r\n\t);\r\n}\r\n","import {useCallback, useEffect, useMemo, useRef, useState} from \"react\";\r\nimport {CancellablePromise, EntityBase} from \"zavadil-ts-common\";\r\nimport TextInputWithReset from \"./TextInputWithReset\";\r\nimport {Dropdown} from \"react-bootstrap\";\r\n\r\nexport type AutocompleteSelectProps<T extends EntityBase> = {\r\n\tselected?: T | null;\r\n\tonChange: (e: T | null) => any;\r\n\tonSearch: (text: string) => Promise<Array<T>>;\r\n\tdisabled?: boolean;\r\n\tlabelGetter?: (item: T) => string;\r\n}\r\n\r\nexport function AutocompleteSelect<T extends EntityBase>({selected, disabled, labelGetter, onChange, onSearch}: AutocompleteSelectProps<T>) {\r\n\tconst [searchPromise, setSearchPromise] = useState<CancellablePromise>();\r\n\tconst [searchText, setSearchText] = useState<string>();\r\n\tconst [itemSelection, setItemSelection] = useState<Array<T>>();\r\n\tconst blurTimeout = useRef<number>();\r\n\r\n\tconst finalLabelGetter = useCallback(\r\n\t\t(item: T) => {\r\n\t\t\tif (labelGetter) return labelGetter(item);\r\n\t\t\tif ('name' in item && typeof item.name === 'string') return item.name;\r\n\t\t\treturn `[${item.id}]`;\r\n\t\t},\r\n\t\t[labelGetter]\r\n\t);\r\n\r\n\tconst finalCss = useMemo(\r\n\t\t() => selected ? 'border rounded border-primary' : undefined,\r\n\t\t[selected]\r\n\t);\r\n\r\n\tconst userLeftControl = useCallback(\r\n\t\t() => {\r\n\t\t\tconsole.log('user left control');\r\n\t\t\tif (itemSelection) {\r\n\t\t\t\tsetItemSelection(undefined);\r\n\t\t\t\tsetSearchText(selected ? finalLabelGetter(selected) : '');\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onChange, itemSelection, selected, finalLabelGetter]\r\n\t);\r\n\r\n\tconst startBlur = useCallback(\r\n\t\t() => {\r\n\t\t\tblurTimeout.current = window.setTimeout(userLeftControl, 100);\r\n\t\t},\r\n\t\t[blurTimeout, userLeftControl]\r\n\t);\r\n\r\n\tconst cancelBlur = useCallback(\r\n\t\t() => {\r\n\t\t\tif (blurTimeout.current) {\r\n\t\t\t\tclearTimeout(blurTimeout.current);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[blurTimeout]\r\n\t);\r\n\r\n\t// Clean up the timeout when the component unmounts\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\treturn cancelBlur;\r\n\t\t},\r\n\t\t[]\r\n\t);\r\n\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\tsetSearchText(selected ? finalLabelGetter(selected) : '');\r\n\t\t\tif (searchPromise) {\r\n\t\t\t\tsearchPromise.cancel();\r\n\t\t\t\tsetSearchPromise(undefined);\r\n\t\t\t}\r\n\t\t\tsetItemSelection(undefined);\r\n\t\t},\r\n\t\t[selected]\r\n\t);\r\n\r\n\tconst reset = useCallback(\r\n\t\t() => {\r\n\t\t\tonChange(null)\r\n\t\t\tsetSearchText('');\r\n\t\t\tif (searchPromise) {\r\n\t\t\t\tsearchPromise.cancel();\r\n\t\t\t\tsetSearchPromise(undefined);\r\n\t\t\t}\r\n\t\t\tsetItemSelection(undefined);\r\n\t\t},\r\n\t\t[onChange, searchPromise]\r\n\t);\r\n\r\n\tconst userChangedText = useCallback(\r\n\t\t(s: string) => {\r\n\t\t\tsetSearchText(s);\r\n\t\t\tif (searchPromise) {\r\n\t\t\t\tsearchPromise.cancel();\r\n\t\t\t}\r\n\t\t\tconst cancellable = new CancellablePromise(onSearch(s));\r\n\t\t\tcancellable.promise.then(setItemSelection);\r\n\t\t\tsetSearchPromise(cancellable);\r\n\t\t},\r\n\t\t[searchPromise, onSearch]\r\n\t);\r\n\r\n\r\n\tconst userSelectedItem = useCallback(\r\n\t\t(item: T) => {\r\n\t\t\tconsole.log('user selected item');\r\n\t\t\tsetItemSelection(undefined);\r\n\t\t\tonChange({...item});\r\n\t\t},\r\n\t\t[onChange]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<div onBlur={startBlur} onFocus={cancelBlur}>\r\n\t\t\t<Dropdown defaultShow={false} show={itemSelection !== null}>\r\n\t\t\t\t<TextInputWithReset\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\tvalue={searchText}\r\n\t\t\t\t\tonChange={userChangedText}\r\n\t\t\t\t\tonReset={reset}\r\n\t\t\t\t\tclassName={finalCss}\r\n\t\t\t\t/>\r\n\t\t\t\t{\r\n\t\t\t\t\titemSelection &&\r\n\t\t\t\t\t<Dropdown.Menu>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\titemSelection.map(\r\n\t\t\t\t\t\t\t\t(item) => <Dropdown.Item\r\n\t\t\t\t\t\t\t\t\tkey={item.id}\r\n\t\t\t\t\t\t\t\t\tonClick={\r\n\t\t\t\t\t\t\t\t\t\t(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\tcancelBlur();\r\n\t\t\t\t\t\t\t\t\t\t\tuserSelectedItem(item);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tactive={item.id === selected?.id}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{finalLabelGetter(item)}\r\n\t\t\t\t\t\t\t\t</Dropdown.Item>\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</Dropdown.Menu>\r\n\t\t\t\t}\r\n\t\t\t</Dropdown>\r\n\t\t</div>\r\n\t);\r\n}\r\n","import {useCallback} from \"react\";\r\nimport {EntityBase, EntityClient, StringUtil} from \"zavadil-ts-common\";\r\nimport {AutocompleteSelect} from \"./AutocompleteSelect\";\r\n\r\nexport type AutocompleteEntitySelectProps<T extends EntityBase> = {\r\n\tselected?: T | null;\r\n\tonChange: (e: T | null) => any;\r\n\tentityClient: EntityClient<T>;\r\n\tdisabled?: boolean;\r\n\tlabelGetter?: (item: T) => string;\r\n}\r\n\r\nexport function AutocompleteEntitySelect<T extends EntityBase>({\r\n\tselected,\r\n\tdisabled,\r\n\tlabelGetter,\r\n\tonChange,\r\n\tentityClient\r\n}: AutocompleteEntitySelectProps<T>) {\r\n\r\n\tconst search = useCallback(\r\n\t\t(s: string) => entityClient\r\n\t\t\t.loadPage({search: StringUtil.safeLowercase(s), page: 0, size: 10, sorting: [{name: 'id'}]})\r\n\t\t\t.then((p) => p.content),\r\n\t\t[labelGetter]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<AutocompleteSelect\r\n\t\t\tdisabled={disabled}\r\n\t\t\tselected={selected}\r\n\t\t\tlabelGetter={labelGetter}\r\n\t\t\tonSearch={search}\r\n\t\t\tonChange={onChange}\r\n\t\t/>\r\n\t);\r\n}\r\n","import {useCallback, useMemo} from \"react\";\r\nimport {LookupClient, LookupTableEntity, StringUtil} from \"zavadil-ts-common\";\r\nimport {AutocompleteSelect} from \"./AutocompleteSelect\";\r\n\r\nexport type AutocompleteLookupSelectProps<T extends LookupTableEntity> = {\r\n\tselected?: T | null;\r\n\tonChange: (e: T | null) => any;\r\n\tlookupClient: LookupClient<T>;\r\n\tdisabled?: boolean;\r\n\tlabelGetter?: (item: T) => string;\r\n}\r\n\r\nexport function AutocompleteLookupSelect<T extends LookupTableEntity>({\r\n\tselected,\r\n\tdisabled,\r\n\tlabelGetter,\r\n\tonChange,\r\n\tlookupClient\r\n}: AutocompleteLookupSelectProps<T>) {\r\n\tconst finalLabelGetter = useMemo(\r\n\t\t() => labelGetter ? labelGetter : (item: LookupTableEntity) => item.name,\r\n\t\t[labelGetter]\r\n\t);\r\n\r\n\tconst search = useCallback(\r\n\t\t(s: string) => lookupClient\r\n\t\t\t.loadPage({search: StringUtil.safeLowercase(s), page: 0, size: 10, sorting: [{name: 'name'}]})\r\n\t\t\t.then((p) => p.content),\r\n\t\t[labelGetter]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<AutocompleteSelect\r\n\t\t\tdisabled={disabled}\r\n\t\t\tselected={selected}\r\n\t\t\tlabelGetter={finalLabelGetter}\r\n\t\t\tonSearch={search}\r\n\t\t\tonChange={onChange}\r\n\t\t/>\r\n\t);\r\n}\r\n","import {useMemo} from \"react\";\r\nimport {NumberSelect} from \"./NumberSelect\";\r\nimport {EntityBase} from \"zavadil-ts-common\";\r\nimport {GenericSelectOption} from \"./StringSelect\";\r\n\r\nexport type EntityIdSelectProps<T extends EntityBase> = {\r\n\tid?: number | null;\r\n\tonChange: (n: number | null | undefined) => any;\r\n\toptions?: Array<T> | null;\r\n\tshowEmptyOption?: boolean;\r\n\tdisabled?: boolean;\r\n\temptyOptionLabel?: string;\r\n\tsort?: boolean;\r\n\tlabelGetter: (item: T) => string;\r\n}\r\n\r\nexport function EntityIdSelect<T extends EntityBase>(\r\n\t{id, sort, disabled, labelGetter, onChange, options, showEmptyOption, emptyOptionLabel}: EntityIdSelectProps<T>\r\n) {\r\n\tconst lOptions: GenericSelectOption<number>[] = useMemo(\r\n\t\t() => {\r\n\t\t\tlet result: Array<T> = []\r\n\t\t\tif (options) {\r\n\t\t\t\tresult = sort ? options.sort((a, b) => labelGetter(a) > labelGetter(b) ? 1 : -1) : options;\r\n\t\t\t}\r\n\t\t\treturn result\r\n\t\t\t\t.map(\r\n\t\t\t\t\t(o) => {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tid: o.id,\r\n\t\t\t\t\t\t\tlabel: labelGetter(o)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t},\r\n\t\t[options]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<NumberSelect\r\n\t\t\tdisabled={disabled}\r\n\t\t\tvalue={id}\r\n\t\t\toptions={lOptions}\r\n\t\t\tonChange={onChange}\r\n\t\t\tshowEmptyOption={showEmptyOption}\r\n\t\t\temptyOptionLabel={emptyOptionLabel}\r\n\t\t/>\r\n\t);\r\n}\r\n","import {EntityBase} from \"zavadil-ts-common\";\r\nimport {EntityIdSelect} from \"./EntityIdSelect\";\r\n\r\nexport type EntitySelectProps<T extends EntityBase> = {\r\n\tvalue?: T | null;\r\n\tonChange: (e: T | null | undefined) => any;\r\n\toptions?: Array<T> | null;\r\n\tshowEmptyOption?: boolean;\r\n\tdisabled?: boolean;\r\n\temptyOptionLabel?: string;\r\n\tsort?: boolean;\r\n\tlabelGetter: (item: T) => string;\r\n}\r\n\r\nexport function EntitySelect<T extends EntityBase>(\r\n\t{value, sort, disabled, labelGetter, onChange, options, showEmptyOption, emptyOptionLabel}: EntitySelectProps<T>\r\n) {\r\n\r\n\treturn (\r\n\t\t<EntityIdSelect\r\n\t\t\tdisabled={disabled}\r\n\t\t\tid={value ? value.id : null}\r\n\t\t\toptions={options}\r\n\t\t\tsort={sort}\r\n\t\t\tonChange={\r\n\t\t\t\t(id) => {\r\n\t\t\t\t\tif (!options || !id) {\r\n\t\t\t\t\t\tonChange(undefined);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonChange(options.find((o) => o.id === id));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlabelGetter={labelGetter}\r\n\t\t\tshowEmptyOption={showEmptyOption}\r\n\t\t\temptyOptionLabel={emptyOptionLabel}\r\n\t\t/>\r\n\t);\r\n}\r\n","import {ObjectUtil, PagingRequest} from 'zavadil-ts-common';\r\nimport React from 'react';\r\nimport {Pagination} from \"react-bootstrap\";\r\n\r\nconst MAX_DISPLAY_PAGES = 10;\r\n\r\nexport type TablePaginationProps = {\r\n\tpaging: PagingRequest;\r\n\ttotalItems: number;\r\n\tonPagingChanged: (p: PagingRequest) => any\r\n};\r\n\r\nexport function TablePagination({\r\n\tpaging,\r\n\ttotalItems,\r\n\tonPagingChanged\r\n}: TablePaginationProps) {\r\n\tconst totalPages = Math.ceil(totalItems / paging.size);\r\n\r\n\tconst pageChanged = (page: number) => {\r\n\t\tpaging.page = page;\r\n\t\tonPagingChanged(ObjectUtil.clone(paging));\r\n\t}\r\n\r\n\tconst paginationItems = [];\r\n\r\n\tif (totalPages > 1) {\r\n\t\tpaginationItems.push(<Pagination.First key=\"first\" onClick={() => pageChanged(0)} disabled={paging.page === 0}/>);\r\n\t\tpaginationItems.push(<Pagination.Prev key=\"prev\" onClick={() => pageChanged(paging.page - 1)} disabled={paging.page === 0}/>);\r\n\r\n\t\tconst maxPagesSide = Math.round((MAX_DISPLAY_PAGES - 3) / 2);\r\n\r\n\t\tlet start = (paging.page > maxPagesSide) ? paging.page - maxPagesSide : 0;\r\n\t\tlet end = start + MAX_DISPLAY_PAGES;\r\n\r\n\t\tif (end >= totalPages) {\r\n\t\t\tend = totalPages - 1;\r\n\t\t}\r\n\r\n\t\tif (start > 0) {\r\n\t\t\tpaginationItems.push(<Pagination.Ellipsis key=\"ellipsisStart\" disabled={true}/>);\r\n\t\t}\r\n\r\n\t\tfor (let number = start; number <= end; number++) {\r\n\t\t\tpaginationItems.push(\r\n\t\t\t\t<Pagination.Item key={number} active={number === paging.page} onClick={() => pageChanged(number)}>\r\n\t\t\t\t\t{number + 1}\r\n\t\t\t\t</Pagination.Item>,\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (end < (totalPages - 1)) {\r\n\t\t\tpaginationItems.push(<Pagination.Ellipsis key=\"ellipsisEnd\" disabled={true}/>);\r\n\t\t}\r\n\r\n\t\tpaginationItems.push(<Pagination.Next key=\"next\" onClick={() => pageChanged(paging.page + 1)} disabled={paging.page === (totalPages - 1)}/>);\r\n\t\tpaginationItems.push(<Pagination.Last key=\"last\" onClick={() => pageChanged(totalPages - 1)} disabled={paging.page === (totalPages - 1)}/>);\r\n\t}\r\n\r\n\treturn <Pagination size=\"sm\" className=\"flex-wrap m-0\">{paginationItems}</Pagination>\r\n}\r\n\r\nexport default TablePagination;\r\n","import {ObjectUtil, PagingRequest, StringUtil} from 'zavadil-ts-common';\r\nimport React, {PropsWithChildren, useMemo} from 'react';\r\nimport {Table} from \"react-bootstrap\";\r\nimport {BsFillCaretDownFill, BsFillCaretUpFill} from 'react-icons/bs';\r\nimport {TableHeader} from \"./TableTypes\";\r\nimport {NumberSelect} from \"../forms\";\r\nimport Localize from \"../localization/Localize\";\r\nimport TablePagination from \"./TablePagination\";\r\n\r\nconst DEFAULT_SIZES = [\r\n\t{\r\n\t\tid: 10,\r\n\t\tlabel: '10'\r\n\t},\r\n\t{\r\n\t\tid: 100,\r\n\t\tlabel: '100'\r\n\t},\r\n\t{\r\n\t\tid: 1000,\r\n\t\tlabel: '1000'\r\n\t}\r\n];\r\n\r\nexport type AdvancedTableProps = {\r\n\theader: TableHeader;\r\n\tlanguage?: \"cs\" | \"en\";\r\n\tpaging: PagingRequest;\r\n\ttotalItems: number;\r\n\thover?: boolean;\r\n\tshowPagingOnBottom?: boolean;\r\n\tshowPageSizeSelection?: boolean;\r\n\tstriped?: boolean;\r\n\tbordered?: boolean;\r\n\tonPagingChanged: (p: PagingRequest) => any\r\n};\r\n\r\nexport function AdvancedTable({\r\n\thover,\r\n\tshowPagingOnBottom,\r\n\tshowPageSizeSelection,\r\n\tstriped,\r\n\tbordered,\r\n\theader,\r\n\tchildren,\r\n\tpaging,\r\n\ttotalItems,\r\n\tonPagingChanged\r\n}: PropsWithChildren<AdvancedTableProps>) {\r\n\tconst totalPages = Math.ceil(totalItems / paging.size);\r\n\r\n\tconst sizes = useMemo(\r\n\t\t() => {\r\n\t\t\tconst s = paging.size;\r\n\t\t\tif (DEFAULT_SIZES.find((si) => si.id === s) === null) {\r\n\t\t\t\tconst ss = ObjectUtil.clone(DEFAULT_SIZES);\r\n\t\t\t\tss.push({id: s, label: String(s)});\r\n\t\t\t\treturn ss;\r\n\t\t\t}\r\n\t\t\treturn DEFAULT_SIZES;\r\n\t\t},\r\n\t\t[paging]\r\n\t);\r\n\r\n\tconst sortingChanged = (e: React.MouseEvent<HTMLTableCellElement>, fieldName: string) => {\r\n\t\tif (!paging.sorting) paging.sorting = [];\r\n\t\tlet field = paging.sorting.find((f) => f.name === fieldName);\r\n\t\tconst isSoleField = field && paging.sorting.length === 1;\r\n\t\tif (!(e.ctrlKey || isSoleField)) {\r\n\t\t\tpaging.sorting = [];\r\n\t\t\tfield = undefined;\r\n\t\t}\r\n\t\tif (field) {\r\n\t\t\tfield.desc = !field.desc;\r\n\t\t} else {\r\n\t\t\tpaging.sorting.push({name: fieldName});\r\n\t\t}\r\n\t\tonPagingChanged(ObjectUtil.clone(paging));\r\n\t}\r\n\r\n\treturn (\r\n\t\t<div>\r\n\t\t\t<Table hover={hover} striped={striped} responsive bordered={bordered}>\r\n\t\t\t\t<thead>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td colSpan={header.length}>\r\n\t\t\t\t\t\t<div className=\"d-flex justify-content-between align-items-center gap-2\">\r\n\t\t\t\t\t\t\t<div><Localize text='Page'/>: {paging.page + 1} / {totalPages}</div>\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttotalPages > 0 && <TablePagination paging={paging} totalItems={totalItems} onPagingChanged={onPagingChanged}/>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t<div><Localize text='Total items'/>: {totalItems}</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\theader.map(\r\n\t\t\t\t\t\t\t(h, index) => {\r\n\t\t\t\t\t\t\t\tconst sortBy = h.sort === false ? '' : (StringUtil.isBlank(h.sort) ? h.name : h.sort);\r\n\t\t\t\t\t\t\t\tif (StringUtil.isBlank(sortBy) || (!sortBy)) {\r\n\t\t\t\t\t\t\t\t\treturn <th key={index}>{h.label}</th>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tconst field = paging.sorting && paging.sorting.find((s) => s.name === sortBy);\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<th\r\n\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"user-select-none text-nowrap\"\r\n\t\t\t\t\t\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={(e: React.MouseEvent<HTMLTableCellElement>) => sortingChanged(e, sortBy)}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{h.label}\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tfield ? field.desc ? <BsFillCaretDownFill/> : <BsFillCaretUpFill/> : <></>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t}\r\n\t\t\t\t</tr>\r\n\t\t\t\t</thead>\r\n\t\t\t\t<tbody>\r\n\t\t\t\t{children}\r\n\t\t\t\t</tbody>\r\n\t\t\t\t{\r\n\t\t\t\t\ttotalItems > 0 && <tfoot>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tshowPagingOnBottom &&\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td colSpan={header.length}>\r\n\t\t\t\t\t\t\t\t<div className=\"d-flex justify-content-between align-items-center gap-2\">\r\n\t\t\t\t\t\t\t\t\t<div><Localize text='Page'/>: {paging.page + 1} / {totalPages}</div>\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\ttotalPages > 0 && <TablePagination paging={paging} totalItems={totalItems} onPagingChanged={onPagingChanged}/>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t<div><Localize text='Total items'/>: {totalItems}</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tshowPageSizeSelection &&\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td colSpan={header.length}>\r\n\t\t\t\t\t\t\t\t<div className=\"d-flex align-items-center gap-2 justify-content-end\">\r\n\t\t\t\t\t\t\t\t\t<div className=\"text-nowrap\"><Localize text='Page size'/>:</div>\r\n\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t<NumberSelect\r\n\t\t\t\t\t\t\t\t\t\t\tvalue={paging.size}\r\n\t\t\t\t\t\t\t\t\t\t\toptions={sizes}\r\n\t\t\t\t\t\t\t\t\t\t\tonChange={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpaging.size = e || 10\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tonPagingChanged({...paging});\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tshowEmptyOption={false}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t</tfoot>\r\n\t\t\t\t}\r\n\t\t\t</Table>\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default AdvancedTable;\r\n","import {ReactNode, useMemo} from \"react\";\r\nimport {SwitchProps} from \"./Switch\";\r\nimport {BsCheckCircle, BsCircle} from \"react-icons/bs\";\r\n\r\nexport type IconCheckProps = SwitchProps & {\r\n\ticonOn?: ReactNode;\r\n\ticonOff?: ReactNode;\r\n};\r\n\r\nexport function IconCheck({disabled, checked, iconOn, iconOff, size, onChange}: IconCheckProps) {\r\n\tconst renderedIcon = useMemo(\r\n\t\t() => checked ? (iconOn ? iconOn : <BsCheckCircle size={size}/>) : (iconOff ? iconOff : <BsCircle size={size} className=\"text-muted\"/>),\r\n\t\t[checked, iconOn, iconOff, size]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<div\r\n\t\t\tclassName=\"d-flex align-items-center cursor-pointer\"\r\n\t\t\tonClick={(e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tonChange(!checked)\r\n\t\t\t}\r\n\t\t\t}\r\n\t\t>\r\n\t\t\t{renderedIcon}\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default IconCheck;\r\n","import {DateUtil, ObjectUtil} from \"zavadil-ts-common\";\r\n\r\nexport type DurationProps = {\r\n\tms?: number | null;\r\n};\r\n\r\nexport function Duration({ms}: DurationProps) {\r\n\tif (ObjectUtil.isEmpty(ms)) return <></>;\r\n\treturn <div className=\"text-nowrap\">{DateUtil.formatDuration(ms)}</div>;\r\n}\r\n","import {BsBug, BsExclamationDiamond, BsInfo, BsQuestion} from \"react-icons/bs\";\r\nimport {IconType} from \"react-icons\";\r\nimport {UserAlertType} from \"zavadil-ts-common\";\r\n\r\nexport type UserAlertTypeIconProps = {\r\n\ttype: UserAlertType;\r\n\tsize?: string | number;\r\n\tcustomVariant?: string;\r\n};\r\n\r\nconst ICONS = new Map<UserAlertType, IconType>(\r\n\t[\r\n\t\t[UserAlertType.error, BsBug],\r\n\t\t[UserAlertType.warning, BsExclamationDiamond],\r\n\t\t[UserAlertType.info, BsInfo]\r\n\t]\r\n);\r\n\r\nexport function UserAlertTypeIcon({type, size, customVariant}: UserAlertTypeIconProps) {\r\n\tconst iconFunc = ICONS.get(type) || BsQuestion;\r\n\treturn <div className={`d-flex align-items-center text-${customVariant === undefined ? type : customVariant}`}>{iconFunc({size: size})}</div>\r\n}\r\n\r\nexport default UserAlertTypeIcon;\r\n","import {DateUtil, UserAlert} from 'zavadil-ts-common';\r\nimport {ProgressBar, Stack} from \"react-bootstrap\";\r\nimport UserAlertTypeIcon from \"./UserAlertTypeIcon\";\r\n\r\nexport type UserAlertWidgetProps = {\r\n\tuserAlert: UserAlert;\r\n\tmaxDurationMs: number;\r\n};\r\n\r\nexport function UserAlertWidget({userAlert, maxDurationMs}: UserAlertWidgetProps) {\r\n\treturn (\r\n\t\t<Stack direction=\"horizontal\" gap={2} className=\"align-items-center\">\r\n\t\t\t{\r\n\t\t\t\tuserAlert.remainsMs && <div style={{width: 20}}>\r\n\t\t\t\t\t<ProgressBar min={0} max={maxDurationMs} now={userAlert.remainsMs} variant={userAlert.type}/>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t\t<div>{DateUtil.formatDateForHumans(userAlert.time)}</div>\r\n\t\t\t<UserAlertTypeIcon type={userAlert.type}/>\r\n\t\t\t<div>{userAlert.message}</div>\r\n\t\t</Stack>\r\n\t);\r\n}\r\n\r\nexport default UserAlertWidget;\r\n","import {Button, Modal, Stack} from \"react-bootstrap\";\r\nimport {BasicDialogProps} from \"./DialogProps\";\r\nimport {createContext} from \"react\";\r\nimport {Localize} from \"../localization\";\r\n\r\nexport class ConfirmDialogContextData {\r\n\tsetProps: (props?: ConfirmDialogProps) => any;\r\n\r\n\tconstructor(setProps: (props?: ConfirmDialogProps) => any) {\r\n\t\tthis.setProps = setProps;\r\n\t}\r\n\r\n\tconfirm(name: string, text: string, onConfirmed: () => any) {\r\n\t\tthis.setProps(\r\n\t\t\t{\r\n\t\t\t\tname: name,\r\n\t\t\t\ttext: text,\r\n\t\t\t\tonConfirm: () => {\r\n\t\t\t\t\tonConfirmed();\r\n\t\t\t\t\tthis.setProps(undefined);\r\n\t\t\t\t},\r\n\t\t\t\tonClose: () => this.setProps(undefined)\r\n\t\t\t}\r\n\t\t)\r\n\t}\r\n}\r\n\r\nexport const ConfirmDialogContext = createContext<ConfirmDialogContextData>(new ConfirmDialogContextData(() => undefined));\r\n\r\nexport type ConfirmDialogProps = BasicDialogProps & {\r\n\tonConfirm: () => any;\r\n};\r\n\r\nexport function ConfirmDialog({name, text, onClose, onConfirm}: ConfirmDialogProps) {\r\n\treturn (\r\n\t\t<Modal show={true} backdrop={true} onHide={onClose}>\r\n\t\t\t<Modal.Header>{name || 'Confirm'}</Modal.Header>\r\n\t\t\t<Modal.Body>{text}</Modal.Body>\r\n\t\t\t<Modal.Footer>\r\n\t\t\t\t<Stack direction=\"horizontal\">\r\n\t\t\t\t\t<Button variant=\"link\" onClick={onClose}><Localize text=\"Back\"/></Button>\r\n\t\t\t\t\t<Button variant=\"primary\" onClick={onConfirm}><Localize text=\"Yes\"/></Button>\r\n\t\t\t\t</Stack>\r\n\t\t\t</Modal.Footer>\r\n\t\t</Modal>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport {Badge} from \"react-bootstrap\";\r\n\r\nexport type QueueStateControlProps = {\r\n\tstate: string;\r\n}\r\n\r\nconst STATE_COLORS = new Map<string, string>([\r\n\t['Idle', 'secondary'],\r\n\t['Processing', 'success'],\r\n\t['Loading', 'warn'],\r\n]);\r\n\r\nexport function QueueStateControl({state}: QueueStateControlProps) {\r\n\tconst color = STATE_COLORS.get(state) || 'light';\r\n\treturn <Badge className={`bg-${color} text-bg-${color}`}>{state}</Badge>\r\n}\r\n","import {useCallback, useEffect, useState} from \"react\";\r\nimport {EntityBase, EntityClient, EntityClientWithStub} from \"zavadil-ts-common\";\r\nimport {AutocompleteEntitySelect} from \"./AutocompleteEntitySelect\";\r\n\r\nexport type AutocompleteIdSelectProps<T extends EntityBase, TStub extends EntityBase> = {\r\n\tid?: number | null;\r\n\tonChange: (id?: number | null) => any;\r\n\tentityClient: EntityClient<T> | EntityClientWithStub<T, TStub>;\r\n\tdisabled?: boolean;\r\n\tlabelGetter?: (item: T) => string;\r\n}\r\n\r\nexport function AutocompleteEntityIdSelect<T extends EntityBase, TStub extends EntityBase>({\r\n\tid,\r\n\tdisabled,\r\n\tlabelGetter,\r\n\tonChange,\r\n\tentityClient\r\n}: AutocompleteIdSelectProps<T, TStub>) {\r\n\tconst [selected, setSelected] = useState<T | null>(null);\r\n\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\tif (!id) {\r\n\t\t\t\tsetSelected(null);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (selected && selected.id === id) {\r\n\t\t\t\tsetSelected({...selected});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (entityClient instanceof EntityClientWithStub) {\r\n\t\t\t\tentityClient.loadSingleStub(id).then(setSelected);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tentityClient.loadSingle(id).then(setSelected);\r\n\t\t},\r\n\t\t[id]\r\n\t);\r\n\r\n\tconst selectionChanged = useCallback(\r\n\t\t(s: T | null) => {\r\n\t\t\tconst nId = s ? s.id : null;\r\n\t\t\tif (nId !== id) onChange(nId);\r\n\t\t\tsetSelected(s);\r\n\t\t},\r\n\t\t[id, onChange]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<AutocompleteEntitySelect\r\n\t\t\tdisabled={disabled}\r\n\t\t\tselected={selected}\r\n\t\t\tlabelGetter={labelGetter}\r\n\t\t\tentityClient={entityClient}\r\n\t\t\tonChange={selectionChanged}\r\n\t\t/>\r\n\t);\r\n}\r\n","import {useCallback, useEffect, useState} from \"react\";\r\nimport {LookupClient, LookupTableEntity} from \"zavadil-ts-common\";\r\nimport {AutocompleteLookupSelect} from \"./AutocompleteLookupSelect\";\r\n\r\nexport type AutocompleteLookupIdSelectProps<T extends LookupTableEntity> = {\r\n\tid?: number | null;\r\n\tonChange: (id?: number | null) => any;\r\n\tlookupClient: LookupClient<T>;\r\n\tdisabled?: boolean;\r\n\tlabelGetter?: (item: T) => string;\r\n}\r\n\r\nexport function AutocompleteLookupIdSelect<T extends LookupTableEntity>({\r\n\tid,\r\n\tdisabled,\r\n\tlabelGetter,\r\n\tonChange,\r\n\tlookupClient\r\n}: AutocompleteLookupIdSelectProps<T>) {\r\n\tconst [selected, setSelected] = useState<T | null>(null);\r\n\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\tif (!id) {\r\n\t\t\t\tsetSelected(null);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (selected && selected.id === id) {\r\n\t\t\t\tsetSelected({...selected});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tlookupClient.loadSingle(id).then(setSelected);\r\n\t\t},\r\n\t\t[id]\r\n\t);\r\n\r\n\tconst selectionChanged = useCallback(\r\n\t\t(s: T | null) => {\r\n\t\t\tconst nId = s ? s.id : null;\r\n\t\t\tif (nId !== id) onChange(nId);\r\n\t\t\tsetSelected(s);\r\n\t\t},\r\n\t\t[id, selected]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<AutocompleteLookupSelect\r\n\t\t\tdisabled={disabled}\r\n\t\t\tselected={selected}\r\n\t\t\tlabelGetter={labelGetter}\r\n\t\t\tlookupClient={lookupClient}\r\n\t\t\tonChange={selectionChanged}\r\n\t\t/>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport {ProgressBar} from \"react-bootstrap\";\r\nimport {CacheStats} from 'zavadil-ts-common';\r\n\r\nexport type CacheStatsControlProps = {\r\n\tname: string;\r\n\tstats: CacheStats;\r\n}\r\n\r\nexport function CacheStatsControl({name, stats}: CacheStatsControlProps) {\r\n\treturn (\r\n\t\t<div>\r\n\t\t\t<div className=\"d-flex align-items-center gap-2\">\r\n\t\t\t\t<pre>{name}</pre>\r\n\t\t\t\t<pre>\r\n\t\t\t\t[\r\n\t\t\t\t\t{stats.cachedItems}\r\n\t\t\t\t\t{stats.capacity > 0 && ' / '}\r\n\t\t\t\t\t{stats.capacity > 0 && stats.capacity}\r\n\t\t\t\t\t]\r\n\t\t\t\t</pre>\r\n\t\t\t</div>\r\n\t\t\t{\r\n\t\t\t\tstats.capacity > 0 &&\r\n\t\t\t\t<div className=\"p-1\">\r\n\t\t\t\t\t<ProgressBar\r\n\t\t\t\t\t\tnow={stats.cachedItems}\r\n\t\t\t\t\t\tmin={0}\r\n\t\t\t\t\t\tmax={stats.capacity}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t</div>\r\n\t);\r\n}\r\n","import {DateUtil} from 'zavadil-ts-common';\r\nimport {Form} from \"react-bootstrap\";\r\n\r\nexport type DateInputProps = {\r\n\tvalue?: Date | null;\r\n\tonChange: (d: Date | undefined) => any;\r\n\tdisabled?: boolean;\r\n};\r\n\r\nexport function DateInput({value, onChange, disabled}: DateInputProps) {\r\n\treturn (\r\n\t\t<Form.Control\r\n\t\t\ttype=\"date\"\r\n\t\t\tdisabled={disabled}\r\n\t\t\tvalue={DateUtil.formatDateForInput(value)}\r\n\t\t\tonChange={(e) => {\r\n\t\t\t\tonChange(DateUtil.parseDate(e.target.value));\r\n\t\t\t}}\r\n\t\t/>\r\n\t);\r\n}\r\n\r\nexport default DateInput;\r\n","import {DateUtil} from 'zavadil-ts-common';\r\n\r\nexport type DateTimeProps = {\r\n\tvalue?: Date | null;\r\n};\r\n\r\nexport function DateTime({value}: DateTimeProps) {\r\n\treturn (\r\n\t\t<div className=\"text-nowrap\">{DateUtil.formatDateTimeForHumans(value)}</div>\r\n\t);\r\n}\r\n","import {DateUtil} from 'zavadil-ts-common';\r\nimport {Form} from \"react-bootstrap\";\r\n\r\nexport type DateTimeInputProps = {\r\n\tvalue?: Date | null;\r\n\tonChange: (d: Date | undefined) => any;\r\n\tdisabled?: boolean;\r\n};\r\n\r\nexport function DateTimeInput({value, onChange, disabled}: DateTimeInputProps) {\r\n\treturn (\r\n\t\t<Form.Control\r\n\t\t\ttype=\"datetime-local\"\r\n\t\t\tdisabled={disabled}\r\n\t\t\tvalue={DateUtil.formatDateTimeForInput(value)}\r\n\t\t\tonChange={(e) => {\r\n\t\t\t\tonChange(DateUtil.parseDate(e.target.value));\r\n\t\t\t}}\r\n\t\t/>\r\n\t);\r\n}\r\n\r\nexport default DateTimeInput;\r\n","import {PropsWithChildren, useMemo} from \"react\";\r\nimport {ActiveButtonProps, LoadingButton} from \"./LoadingButton\";\r\nimport {BsTrash} from \"react-icons/bs\";\r\n\r\nexport type DeleteButtonProps = ActiveButtonProps & {\r\n\tisChanged?: boolean;\r\n};\r\n\r\nexport function DeleteButton({disabled, icon, loading, children, size, onClick, isChanged}: PropsWithChildren<DeleteButtonProps>) {\r\n\tconst icn = useMemo(\r\n\t\t() => icon ? icon : <BsTrash/>,\r\n\t\t[icon]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<LoadingButton\r\n\t\t\tdisabled={disabled || (isChanged === false)}\r\n\t\t\tonClick={onClick}\r\n\t\t\ticon={icn}\r\n\t\t\tloading={loading}\r\n\t\t\tsize={size}\r\n\t\t\tvariant=\"danger\"\r\n\t\t>\r\n\t\t\t{children}\r\n\t\t</LoadingButton>\r\n\t);\r\n}\r\n","import {ObjectUtil} from \"zavadil-ts-common\";\r\nimport {useMemo} from \"react\";\r\nimport {Duration} from \"./Duration\";\r\n\r\nexport type ElapsedProps = {\r\n\tdate?: Date | null;\r\n};\r\n\r\nexport function Elapsed({date}: ElapsedProps) {\r\n\tconst ms = useMemo(\r\n\t\t() => {\r\n\t\t\tif (ObjectUtil.isEmpty(date)) return null;\r\n\t\t\treturn Date.now() - date.getTime();\r\n\t\t},\r\n\t\t[date]\r\n\t);\r\n\treturn <Duration ms={ms}/>;\r\n}\r\n","import {EntityWithName} from \"zavadil-ts-common\";\r\nimport {EntityIdSelect} from \"./EntityIdSelect\";\r\n\r\nexport type EntityWithNameIdSelectProps<T extends EntityWithName> = {\r\n\tid?: number | null;\r\n\tonChange: (n: number | null | undefined) => any;\r\n\toptions?: Array<T> | null;\r\n\tshowEmptyOption?: boolean;\r\n\tdisabled?: boolean;\r\n\temptyOptionLabel?: string;\r\n\tsort?: boolean;\r\n}\r\n\r\nexport function EntityWithNameIdSelect<T extends EntityWithName>(\r\n\t{id, sort, disabled, onChange, options, showEmptyOption, emptyOptionLabel}: EntityWithNameIdSelectProps<T>\r\n) {\r\n\treturn (\r\n\t\t<EntityIdSelect\r\n\t\t\tid={id}\r\n\t\t\tlabelGetter={(e) => e.name}\r\n\t\t\tdisabled={disabled}\r\n\t\t\tsort={sort}\r\n\t\t\toptions={options}\r\n\t\t\tonChange={onChange}\r\n\t\t\tshowEmptyOption={showEmptyOption}\r\n\t\t\temptyOptionLabel={emptyOptionLabel}\r\n\t\t/>\r\n\t);\r\n}\r\n","import {EntityWithName} from \"zavadil-ts-common\";\r\nimport {EntitySelect} from \"./EntitySelect\";\r\n\r\nexport type EntityWithNameSelectProps<T extends EntityWithName> = {\r\n\tvalue?: T | null;\r\n\tonChange: (e: T | null | undefined) => any;\r\n\toptions?: Array<T> | null;\r\n\tshowEmptyOption?: boolean;\r\n\tdisabled?: boolean;\r\n\temptyOptionLabel?: string;\r\n\tsort?: boolean;\r\n}\r\n\r\nexport function EntityWithNameSelect<T extends EntityWithName>(\r\n\t{value, sort, disabled, onChange, options, showEmptyOption, emptyOptionLabel}: EntityWithNameSelectProps<T>\r\n) {\r\n\treturn (\r\n\t\t<EntitySelect\r\n\t\t\tvalue={value}\r\n\t\t\tlabelGetter={(e) => e.name}\r\n\t\t\tdisabled={disabled}\r\n\t\t\tsort={sort}\r\n\t\t\toptions={options}\r\n\t\t\tonChange={onChange}\r\n\t\t\tshowEmptyOption={showEmptyOption}\r\n\t\t\temptyOptionLabel={emptyOptionLabel}\r\n\t\t/>\r\n\t);\r\n}\r\n","import {useMemo} from \"react\";\r\nimport {StringSelect} from \"./StringSelect\";\r\n\r\nexport type EnumSelectProps = {\r\n\tvalue?: string | null;\r\n\toptions: Array<string>;\r\n\tonChange: (id: string | null | undefined) => any;\r\n\tshowEmptyOption?: boolean;\r\n\temptyOptionLabel?: string;\r\n};\r\n\r\nexport function EnumSelect({value, options, onChange, showEmptyOption, emptyOptionLabel}: EnumSelectProps) {\r\n\tconst nOptions = useMemo(\r\n\t\t() => {\r\n\t\t\tif (!options) return [];\r\n\t\t\treturn options.map(\r\n\t\t\t\t(s) => {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tid: s,\r\n\t\t\t\t\t\tlabel: s\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t},\r\n\t\t[options]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<StringSelect\r\n\t\t\tvalue={value}\r\n\t\t\toptions={nOptions}\r\n\t\t\tonChange={onChange}\r\n\t\t\tshowEmptyOption={showEmptyOption}\r\n\t\t\temptyOptionLabel={emptyOptionLabel}\r\n\t\t/>\r\n\t);\r\n}\r\n","import { PropsWithChildren } from \"react\";\nimport { Form } from \"react-bootstrap\";\nimport { Localize } from \"../localization\";\n\nexport type FormRowProps = PropsWithChildren & {\n label: string;\n};\n\nexport function FormRow({ label, children }: FormRowProps) {\n return (\n <Form.Group>\n <Form.Label>\n <Localize text={label} />\n </Form.Label>\n <div>{children}</div>\n </Form.Group>\n );\n}\n","import {Form} from \"react-bootstrap\";\r\nimport {ReactNode} from \"react\";\r\n\r\nexport type IconSwitchProps = {\r\n\tdisabled?: boolean;\r\n\tchecked: boolean;\r\n\tonChange: (checked: boolean) => any;\r\n\tsize?: number;\r\n\ticonOn: ReactNode;\r\n\ticonOff: ReactNode;\r\n};\r\n\r\nexport function IconSwitch({disabled, checked, iconOn, iconOff, size, onChange}: IconSwitchProps) {\r\n\treturn (\r\n\t\t<div\r\n\t\t\tclassName=\"d-flex align-items-center gap-2 cursor-pointer\"\r\n\t\t\tonClick={(e) => onChange(!checked)}\r\n\t\t>\r\n\t\t\t<Form.Switch\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\tsize={size}\r\n\t\t\t\ttype=\"switch\"\r\n\t\t\t\tchecked={checked}\r\n\t\t\t\treadOnly={true}\r\n\t\t\t\tclassName=\"cursor-pointer\"\r\n\t\t\t/>\r\n\t\t\t{\r\n\t\t\t\tchecked ? iconOn : iconOff\r\n\t\t\t}\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default IconSwitch;\r\n","import React from 'react';\r\nimport {Badge, ProgressBar} from \"react-bootstrap\";\r\nimport {ByteUtil, JavaHeapStats} from \"zavadil-ts-common\";\r\n\r\nexport type WorkerJavaHeapControlProps = {\r\n\tstats: JavaHeapStats;\r\n};\r\n\r\nexport function JavaHeapControl({stats}: WorkerJavaHeapControlProps) {\r\n\tconst size = stats.heapSize;\r\n\tconst max = stats.heapMaxSize;\r\n\tconst free = stats.heapFreeSize;\r\n\tconst used = size - free;\r\n\r\n\treturn (\r\n\t\t<div>\r\n\t\t\t<div className=\"d-flex align-items-center gap-2\">\r\n\t\t\t\t<pre>Java Heap</pre>\r\n\t\t\t\t<pre>[{ByteUtil.formatByteSize(size)} / {ByteUtil.formatByteSize(max)}]</pre>\r\n\t\t\t</div>\r\n\t\t\t<div className=\"d-flex align-items-center gap-2\">\r\n\t\t\t\t<pre>Used:</pre>\r\n\t\t\t\t<Badge className=\"bg-warning text-bg-warning\">\r\n\t\t\t\t\t{ByteUtil.formatByteSize(used)}\r\n\t\t\t\t</Badge>\r\n\t\t\t\t<pre>Free:</pre>\r\n\t\t\t\t<Badge className=\"bg-success text-white\">\r\n\t\t\t\t\t{ByteUtil.formatByteSize(free)}\r\n\t\t\t\t</Badge>\r\n\t\t\t</div>\r\n\t\t\t<div className=\"p-1\">\r\n\t\t\t\t<ProgressBar min={0} max={max}>\r\n\t\t\t\t\t<ProgressBar variant=\"warning\" min={0} now={used} max={max}/>\r\n\t\t\t\t\t<ProgressBar variant=\"success\" min={0} now={free} max={max}/>\r\n\t\t\t\t</ProgressBar>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n}\r\n","import {useMemo} from \"react\";\r\nimport {NumberSelect} from \"./NumberSelect\";\r\nimport {LookupTableEntity} from \"zavadil-ts-common\";\r\nimport {GenericSelectOption} from \"./StringSelect\";\r\n\r\nexport type LookupSelectProps = {\r\n\tid?: number | null;\r\n\tonChange: (n: number | null | undefined) => any;\r\n\toptions?: Array<LookupTableEntity> | null;\r\n\tshowEmptyOption?: boolean;\r\n\tdisabled?: boolean;\r\n\temptyOptionLabel?: string;\r\n\tsort?: boolean;\r\n\tlabelGetter?: <T extends LookupTableEntity>(item: T) => string;\r\n}\r\n\r\nexport function LookupSelect({id, sort, disabled, labelGetter, onChange, options, showEmptyOption, emptyOptionLabel}: LookupSelectProps) {\r\n\tconst lOptions: GenericSelectOption<number>[] = useMemo(\r\n\t\t() => {\r\n\t\t\tlet result: Array<LookupTableEntity> = []\r\n\t\t\tif (options) {\r\n\t\t\t\tresult = sort ? options.sort((a, b) => a.name > b.name ? 1 : -1) : options;\r\n\t\t\t}\r\n\t\t\treturn result\r\n\t\t\t\t.map(\r\n\t\t\t\t\t(o) => {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tid: o.id,\r\n\t\t\t\t\t\t\tlabel: labelGetter ? labelGetter(o) : o.name\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t},\r\n\t\t[options]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<NumberSelect\r\n\t\t\tdisabled={disabled}\r\n\t\t\tvalue={id}\r\n\t\t\toptions={lOptions}\r\n\t\t\tonChange={onChange}\r\n\t\t\tshowEmptyOption={showEmptyOption}\r\n\t\t\temptyOptionLabel={emptyOptionLabel}\r\n\t\t/>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport {Placeholder, ProgressBar} from \"react-bootstrap\";\r\nimport {QueueStats} from 'zavadil-ts-common';\r\nimport {QueueStateControl} from \"./QueueStateControl\";\r\n\r\nexport type QueueStatsControlProps = {\r\n\tname: string;\r\n\tstats?: QueueStats | null;\r\n}\r\n\r\nexport function QueueStatsControl({name, stats}: QueueStatsControlProps) {\r\n\tconst max = stats ? stats.remaining + stats.processed : undefined\r\n\r\n\treturn (\r\n\t\t<div>\r\n\t\t\t<div className=\"d-flex align-items-center gap-2\">\r\n\t\t\t\t<pre>{name}</pre>\r\n\t\t\t\t<pre>[{stats?.processed !== undefined ? stats.processed : '?'} / {max !== undefined ? max : '?'}]</pre>\r\n\t\t\t\t<QueueStateControl state={stats ? stats.state : 'Unknown'}/>\r\n\t\t\t</div>\r\n\t\t\t<div className=\"p-1\">\r\n\t\t\t\t{\r\n\t\t\t\t\tstats ? <ProgressBar variant=\"primary\" striped={true} animated={true} min={0} now={stats.processed} max={max || 1}/>\r\n\t\t\t\t\t\t: <Placeholder className=\"w-100\" animation=\"glow\">\r\n\t\t\t\t\t\t\t<Placeholder className=\"w-100\"/>\r\n\t\t\t\t\t\t</Placeholder>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n}\r\n","import {PropsWithChildren, useMemo} from \"react\";\r\nimport {ActiveButtonProps, LoadingButton} from \"./LoadingButton\";\r\nimport {FaFloppyDisk} from \"react-icons/fa6\";\r\n\r\nexport type SaveButtonProps = ActiveButtonProps & {\r\n\tisChanged?: boolean;\r\n};\r\n\r\nexport function SaveButton({disabled, icon, loading, children, size, onClick, isChanged}: PropsWithChildren<SaveButtonProps>) {\r\n\tconst icn = useMemo(\r\n\t\t() => icon ? icon : <FaFloppyDisk/>,\r\n\t\t[icon]\r\n\t);\r\n\r\n\tconst content = useMemo(\r\n\t\t() => isChanged ? <strong>{children}</strong> : children,\r\n\t\t[isChanged, children]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<LoadingButton\r\n\t\t\tdisabled={disabled || (isChanged === false)}\r\n\t\t\tonClick={onClick}\r\n\t\t\ticon={icn}\r\n\t\t\tloading={loading}\r\n\t\t\tsize={size}\r\n\t\t>\r\n\t\t\t{content}\r\n\t\t</LoadingButton>\r\n\t);\r\n}\r\n","import {PropsWithChildren, useMemo} from \"react\";\r\n\r\nexport type SpreadProps = {\r\n\tcenter?: boolean;\r\n};\r\n\r\nexport function Spread({children, center}: PropsWithChildren<SpreadProps>) {\r\n\tconst css = useMemo(\r\n\t\t() => center === false ? '' : 'd-flex align-items-center justify-content-center',\r\n\t\t[center]\r\n\t);\r\n\r\n\treturn <div\r\n\t\tclassName={`w-100 h-100 position-absolute ${css}`}\r\n\t\tstyle={{left: 0, right: 0, top: 0, bottom: 0}}\r\n\t>\r\n\t\t{children}\r\n\t</div>\r\n}\r\n\r\nexport default Spread;\r\n","import { Form } from \"react-bootstrap\";\nimport { useMemo, ReactNode } from \"react\";\nimport { StringUtil } from \"zavadil-ts-common\";\n\nexport type SwitchProps = {\n id?: string;\n disabled?: boolean;\n checked: boolean;\n onChange: (checked: boolean) => any;\n size?: number;\n label?: string | ReactNode;\n};\n\nexport function Switch({\n id,\n label,\n disabled,\n checked,\n size,\n onChange,\n}: SwitchProps) {\n const actualId = useMemo(() => (id ? id : StringUtil.randomString()), [id]);\n return (\n <Form.Switch\n disabled={disabled}\n id={actualId}\n size={size}\n type=\"switch\"\n checked={checked}\n onChange={(e) => onChange(!checked)}\n className=\"cursor-pointer\"\n label={label}\n />\n );\n}\n","import React, {useMemo} from 'react';\r\nimport {Table} from \"react-bootstrap\";\r\nimport {PlaceholderSize} from \"react-bootstrap/usePlaceholder\";\r\n\r\nconst DEFAULT_COLS = 1;\r\nconst DEFAULT_ROWS = 20;\r\nconst DEFAULT_SIZE: PlaceholderSize = \"lg\";\r\n\r\nexport type TablePlaceholderProps = {\r\n\tcols?: number;\r\n\trows?: number;\r\n\tsize?: PlaceholderSize;\r\n};\r\n\r\nexport function TablePlaceholder({cols, rows, size}: TablePlaceholderProps) {\r\n\tconst colsN: number = useMemo(() => cols === undefined ? DEFAULT_COLS : cols, [cols]);\r\n\tconst rowsN: number = useMemo(() => rows === undefined ? DEFAULT_ROWS : rows, [rows]);\r\n\tconst sizeS: PlaceholderSize = useMemo(() => size === undefined ? DEFAULT_SIZE : size, [size]);\r\n\r\n\treturn (\r\n\t\t<div>\r\n\t\t\t<Table responsive>\r\n\t\t\t\t<tbody>\r\n\t\t\t\t{\r\n\t\t\t\t\tArray.from(\r\n\t\t\t\t\t\t{length: rowsN},\r\n\t\t\t\t\t\t(_, i) => <tr key={i}>\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tArray.from(\r\n\t\t\t\t\t\t\t\t\t{length: colsN},\r\n\t\t\t\t\t\t\t\t\t(_, i) => <td key={i}>\r\n\t\t\t\t\t\t\t\t\t\t<div className=\"w-100 p-1 m-1\"></div>\r\n\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t\t</tbody>\r\n\t\t\t</Table>\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default TablePlaceholder;\r\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\r\nimport {ObjectUtil} from 'zavadil-ts-common';\r\nimport {AdvancedTable, AdvancedTableProps} from \"./AdvancedTable\";\r\nimport {RenderFunc, SelectableTableHeader, TableHeader} from \"./TableTypes\";\r\nimport {BsCheckAll} from \"react-icons/bs\";\r\nimport IconCheck from \"../forms/IconCheck\";\r\n\r\nexport type SelectableItem<T> = {\r\n\tselected: boolean;\r\n\titem: T;\r\n};\r\n\r\nexport type TableWithSelectProps<T> = Omit<AdvancedTableProps, 'header'> & {\r\n\tshowSelect?: boolean;\r\n\theader: SelectableTableHeader<T>;\r\n\titems?: Array<T>;\r\n\tonSelect?: (selected: Array<T>) => any;\r\n\tonClick?: (selected: T) => any;\r\n};\r\n\r\nfunction createRenderer<T>(name: string): RenderFunc<T> {\r\n\treturn (e: T) => ObjectUtil.getNestedValue(e, name);\r\n}\r\n\r\nexport function TableWithSelect<T>({\r\n\tshowSelect,\r\n\theader,\r\n\titems,\r\n\tonSelect,\r\n\tonClick,\r\n\ttotalItems,\r\n\tpaging,\r\n\tonPagingChanged\r\n}: TableWithSelectProps<T>) {\r\n\tconst [selectAll, setSelectAll] = useState<boolean>(false);\r\n\tconst [selectableItems, setSelectableItems] = useState<Array<SelectableItem<T>>>();\r\n\r\n\tconst updateSelectAll = useCallback(\r\n\t\t(sa: boolean) => {\r\n\t\t\tif (selectableItems) {\r\n\t\t\t\tsetSelectableItems(selectableItems.map(\r\n\t\t\t\t\t(i) => {\r\n\t\t\t\t\t\treturn {selected: sa, item: i.item};\r\n\t\t\t\t\t}\r\n\t\t\t\t));\r\n\t\t\t}\r\n\t\t\tsetSelectAll(sa);\r\n\t\t},\r\n\t\t[selectableItems]\r\n\t);\r\n\r\n\tconst selectableHeader = useMemo(\r\n\t\t() => {\r\n\t\t\tconst h: TableHeader = [...header];\r\n\t\t\tif (showSelect !== false) {\r\n\t\t\t\th.unshift(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tname: '',\r\n\t\t\t\t\t\tlabel: <div className=\"py-1\">\r\n\t\t\t\t\t\t\t<IconCheck\r\n\t\t\t\t\t\t\t\tchecked={selectAll}\r\n\t\t\t\t\t\t\t\tonChange={\r\n\t\t\t\t\t\t\t\t\t() => updateSelectAll(!selectAll)\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\ticonOn={<BsCheckAll/>}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\treturn h;\r\n\t\t},\r\n\t\t[header, selectAll, updateSelectAll]\r\n\t);\r\n\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\tsetSelectableItems(items ? items.map(\r\n\t\t\t\t(i) => {\r\n\t\t\t\t\treturn {selected: selectAll, item: i};\r\n\t\t\t\t}\r\n\t\t\t) : undefined);\r\n\t\t},\r\n\t\t[items]\r\n\t);\r\n\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\tif (!selectableItems) return;\r\n\t\t\tif (!onSelect) return;\r\n\t\t\tonSelect(selectableItems.filter((i) => i.selected).map((i) => i.item));\r\n\t\t},\r\n\t\t[selectableItems, onSelect]\r\n\t);\r\n\r\n\treturn <AdvancedTable\r\n\t\theader={selectableHeader}\r\n\t\thover={onClick !== undefined}\r\n\t\tpaging={paging}\r\n\t\tstriped={true}\r\n\t\ttotalItems={totalItems}\r\n\t\tonPagingChanged={onPagingChanged}\r\n\t>\r\n\t\t{\r\n\t\t\tselectableItems && selectableItems.map(\r\n\t\t\t\t(item, index) => <tr\r\n\t\t\t\t\tkey={index}\r\n\t\t\t\t\tclassName={`selectable ${onClick ? 'cursor-pointer' : ''} ${item.selected ? 'table-active table-primary' : ''}`}\r\n\t\t\t\t\tonClick={\r\n\t\t\t\t\t\t(e) => {\r\n\t\t\t\t\t\t\tif (onClick) onClick(item.item);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t(showSelect !== false) && <td>\r\n\t\t\t\t\t\t\t<div className=\"py-2 d-flex align-items-center\">\r\n\t\t\t\t\t\t\t\t<IconCheck\r\n\t\t\t\t\t\t\t\t\tchecked={item.selected}\r\n\t\t\t\t\t\t\t\t\tonChange={\r\n\t\t\t\t\t\t\t\t\t\t() => {\r\n\t\t\t\t\t\t\t\t\t\t\titem.selected = !item.selected;\r\n\t\t\t\t\t\t\t\t\t\t\tif (selectAll && !item.selected) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tsetSelectAll(false);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tsetSelectableItems([...selectableItems]);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\theader.map(\r\n\t\t\t\t\t\t\t(h, index) => {\r\n\t\t\t\t\t\t\t\tconst renderer = h.renderer || createRenderer(h.name);\r\n\t\t\t\t\t\t\t\treturn <td key={index}>{renderer(item.item)}</td>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t}\r\n\t\t\t\t</tr>\r\n\t\t\t)\r\n\t\t}\r\n\t</AdvancedTable>\r\n}\r\n\r\nexport default TableWithSelect;\r\n","import {UserAlert, UserAlerts, UserAlertType} from 'zavadil-ts-common';\r\nimport {useCallback, useEffect, useState} from \"react\";\r\nimport UserAlertWidget from \"./UserAlertWidget\";\r\nimport UserAlertTypeIcon from \"./UserAlertTypeIcon\";\r\nimport {Stack} from \"react-bootstrap\";\r\nimport {IconButton} from \"../forms\";\r\nimport {BsEye, BsTrash} from \"react-icons/bs\";\r\nimport {VscEyeClosed} from \"react-icons/vsc\";\r\n\r\nexport type UserAlertsWidgetProps = {\r\n\tuserAlerts: UserAlerts;\r\n};\r\n\r\nexport function UserAlertsWidget({userAlerts}: UserAlertsWidgetProps) {\r\n\tconst [showAll, setShowAll] = useState<boolean>(false);\r\n\tconst [totalAlerts, setTotalAlerts] = useState<number>(userAlerts.alerts.length);\r\n\tconst [renderedAlerts, setRenderedAlerts] = useState<UserAlert[]>([...userAlerts.visibleAlerts]);\r\n\tconst [summary, setSummary] = useState<Map<UserAlertType, number>>(userAlerts.getSummary());\r\n\r\n\tconst onChangeHandler = useCallback(\r\n\t\t() => {\r\n\t\t\tsetTotalAlerts(userAlerts.alerts.length);\r\n\t\t\tsetRenderedAlerts(showAll ? [...userAlerts.alerts] : [...userAlerts.visibleAlerts]);\r\n\t\t\tsetSummary(userAlerts.getSummary());\r\n\t\t},\r\n\t\t[userAlerts, showAll]\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\t\tuserAlerts.addOnChangeHandler(onChangeHandler);\r\n\t\t\tconst handle = setInterval(\r\n\t\t\t\t() => userAlerts.updateVisibility(),\r\n\t\t\t\t100\r\n\t\t\t);\r\n\t\t\treturn () => {\r\n\t\t\t\tclearInterval(handle);\r\n\t\t\t\tuserAlerts.removeOnChangeHandler(onChangeHandler);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[userAlerts, onChangeHandler]\r\n\t);\r\n\r\n\tif (totalAlerts <= 0) return <></>;\r\n\r\n\treturn (\r\n\t\t<div className=\"user-alerts border rounded bg-body text-body position-fixed text-end\" style={{bottom: 15, right: 15, zIndex: 2147483647}}>\r\n\t\t\t{\r\n\t\t\t\trenderedAlerts.length > 0 &&\r\n\t\t\t\t<div className=\"max-w-50 p-2 border-bottom\">\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\trenderedAlerts.map((a, index) => <UserAlertWidget key={index} userAlert={a} maxDurationMs={userAlerts.maxVisibilityMs}/>)\r\n\t\t\t\t\t}\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t\t<div className=\"p-2\">\r\n\t\t\t\t<Stack direction=\"horizontal\" gap={2} className=\"justify-content-end align-items-center\">\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tshowAll ? <IconButton size=\"sm\" variant=\"primary\" onClick={() => setShowAll(false)} icon={<VscEyeClosed/>}>Hide</IconButton>\r\n\t\t\t\t\t\t\t: <IconButton size=\"sm\" variant=\"primary\" onClick={() => setShowAll(true)} icon={<BsEye/>}>Show All</IconButton>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tArray.from(summary.entries()).map(\r\n\t\t\t\t\t\t\t(entry, index) => (\r\n\t\t\t\t\t\t\t\t<Stack key={index} direction=\"horizontal\" gap={1} className=\"px-1 border rounded align-items-center\">\r\n\t\t\t\t\t\t\t\t\t<UserAlertTypeIcon type={entry[0]} customVariant={entry[1] === 0 ? 'muted' : undefined}/>\r\n\t\t\t\t\t\t\t\t\t<div className={entry[1] > 0 ? `text-${entry[0]} fw-bold` : 'text-muted'}>\r\n\t\t\t\t\t\t\t\t\t\t{entry[1]}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</Stack>\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t}\r\n\t\t\t\t\t<IconButton size=\"sm\" variant=\"danger\" onClick={() => userAlerts.reset()} icon={<BsTrash/>}>Reset</IconButton>\r\n\t\t\t\t</Stack>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default UserAlertsWidget;\r\n"],"names":["LocalizationContext","createContext","BasicLocalization","Localize","text","tag","localization","useContext","p","useMemo","undefined","tags","t","translate","_jsx","jsx","_Fragment","Fragment","children","TextInputWithReset","value","onChange","onReset","onBlur","disabled","className","actual","StringUtil","getNonEmpty","isEmpty","isBlank","reset","useCallback","_jsxs","jsxs","InputGroup","Form","Control","type","e","target","Button","onClick","BsXCircle","IconButton","variant","icon","size","LoadingButton","loading","Spinner","StringSelect","options","showEmptyOption","emptyOptionLabel","useEffect","length","id","Select","map","o","i","label","NumberSelect","nValue","String","nOptions","nChange","s","NumberUtil","parseNumber","AutocompleteSelect","selected","labelGetter","onSearch","searchPromise","setSearchPromise","useState","searchText","setSearchText","itemSelection","setItemSelection","blurTimeout","useRef","finalLabelGetter","item","name","finalCss","userLeftControl","console","log","startBlur","current","window","setTimeout","cancelBlur","clearTimeout","cancel","userChangedText","cancellable","CancellablePromise","promise","then","userSelectedItem","onFocus","Dropdown","defaultShow","show","Menu","Item","active","AutocompleteEntitySelect","entityClient","search","loadPage","safeLowercase","page","sorting","content","AutocompleteLookupSelect","lookupClient","EntityIdSelect","sort","lOptions","result","a","b","EntitySelect","find","TablePagination","paging","totalItems","onPagingChanged","totalPages","Math","ceil","pageChanged","ObjectUtil","clone","paginationItems","push","Pagination","First","Prev","maxPagesSide","round","start","end","Ellipsis","number","Next","Last","DEFAULT_SIZES","AdvancedTable","hover","showPagingOnBottom","showPageSizeSelection","striped","bordered","header","sizes","si","ss","Table","responsive","colSpan","h","index","sortBy","field","role","fieldName","f","isSoleField","ctrlKey","desc","sortingChanged","BsFillCaretDownFill","BsFillCaretUpFill","IconCheck","checked","iconOn","iconOff","renderedIcon","BsCheckCircle","BsCircle","stopPropagation","preventDefault","Duration","ms","DateUtil","formatDuration","ICONS","Map","UserAlertType","error","BsBug","warning","BsExclamationDiamond","info","BsInfo","UserAlertTypeIcon","customVariant","iconFunc","get","BsQuestion","UserAlertWidget","userAlert","maxDurationMs","Stack","direction","gap","remainsMs","style","width","ProgressBar","min","max","now","formatDateForHumans","time","message","ConfirmDialogContextData","constructor","setProps","this","confirm","onConfirmed","onConfirm","onClose","ConfirmDialogContext","STATE_COLORS","QueueStateControl","state","color","Badge","setSelected","EntityClientWithStub","loadSingleStub","loadSingle","selectionChanged","nId","stats","cachedItems","capacity","Modal","backdrop","onHide","Header","Body","Footer","formatDateForInput","parseDate","formatDateTimeForHumans","formatDateTimeForInput","isChanged","icn","BsTrash","date","Date","getTime","Group","Label","Switch","readOnly","heapSize","heapMaxSize","free","heapFreeSize","used","ByteUtil","formatByteSize","remaining","processed","animated","Placeholder","animation","FaFloppyDisk","center","css","left","right","top","bottom","actualId","randomString","cols","rows","colsN","rowsN","Array","from","_","showSelect","items","onSelect","selectAll","setSelectAll","selectableItems","setSelectableItems","updateSelectAll","sa","selectableHeader","unshift","BsCheckAll","filter","renderer","getNestedValue","userAlerts","showAll","setShowAll","totalAlerts","setTotalAlerts","alerts","renderedAlerts","setRenderedAlerts","visibleAlerts","summary","setSummary","getSummary","onChangeHandler","addOnChangeHandler","handle","setInterval","updateVisibility","clearInterval","removeOnChangeHandler","zIndex","maxVisibilityMs","VscEyeClosed","BsEye","entries","entry"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/component/localization/LocalizationContext.ts","../src/component/localization/Localize.tsx","../src/component/forms/TextInputWithReset.tsx","../src/component/forms/IconButton.tsx","../src/component/forms/LoadingButton.tsx","../src/component/forms/StringSelect.tsx","../src/component/forms/NumberSelect.tsx","../src/component/forms/AutocompleteSelect.tsx","../src/component/forms/AutocompleteEntitySelect.tsx","../src/component/forms/AutocompleteLookupSelect.tsx","../src/component/forms/EntityIdSelect.tsx","../src/component/forms/EntitySelect.tsx","../src/component/tables/TablePagination.tsx","../src/component/tables/AdvancedTable.tsx","../src/component/forms/IconCheck.tsx","../src/component/datetime/Duration.tsx","../src/component/alerts/UserAlertTypeIcon.tsx","../src/component/alerts/UserAlertWidget.tsx","../src/component/dialogs/ConfirmDialog.tsx","../src/component/stats/QueueStateControl.tsx","../src/component/forms/AutocompleteEntityIdSelect.tsx","../src/component/forms/AutocompleteLookupIdSelect.tsx","../src/component/stats/CacheStatsControl.tsx","../src/component/forms/DateInput.tsx","../src/component/datetime/DateTime.tsx","../src/component/forms/DateTimeInput.tsx","../src/component/forms/DeleteButton.tsx","../src/component/datetime/Elapsed.tsx","../src/component/forms/EntityWithNameIdSelect.tsx","../src/component/forms/EntityWithNameSelect.tsx","../src/component/forms/EnumSelect.tsx","../src/component/forms/FormRow.tsx","../src/component/forms/IconSwitch.tsx","../src/component/stats/JavaHeapControl.tsx","../src/component/forms/LookupSelect.tsx","../src/component/stats/QueueStatsControl.tsx","../src/component/forms/SaveButton.tsx","../src/component/Spread.tsx","../src/component/forms/Switch.tsx","../src/component/tables/TablePlaceholder.tsx","../src/component/tables/TableWithSelect.tsx","../src/component/alerts/UserAlertsWidget.tsx"],"sourcesContent":["import {createContext} from \"react\";\nimport {BasicLocalization, Localization} from \"zavadil-ts-common\";\n\nexport const LocalizationContext = createContext<Localization>(new BasicLocalization());\n","import {useContext, useMemo} from \"react\";\r\nimport {LocalizationContext} from \"./LocalizationContext\";\r\nimport {TranslateParams} from \"zavadil-ts-common\";\r\n\r\nexport type LocalizeProps = {\r\n\ttext: string;\r\n\ttag?: string | Array<string>;\r\n};\r\n\r\nexport function Localize({text, tag}: LocalizeProps) {\r\n\tconst localization = useContext(LocalizationContext);\r\n\r\n\tconst p: TranslateParams | undefined = useMemo(\r\n\t\t() => {\r\n\t\t\tif (tag === undefined || tag === '') return undefined;\r\n\t\t\tif (typeof tag === 'string') return {tags: [tag]};\r\n\t\t\treturn {tags: tag};\r\n\t\t},\r\n\t\t[tag]\r\n\t);\r\n\r\n\tconst t = useMemo(\r\n\t\t() => localization.translate(text, p),\r\n\t\t[localization, text, p]\r\n\t);\r\n\treturn <>{t}</>;\r\n}\r\n\r\nexport default Localize;\r\n","import {StringUtil} from 'zavadil-ts-common';\r\nimport {Button, Form, InputGroup} from \"react-bootstrap\";\r\nimport {BsXCircle} from \"react-icons/bs\";\r\nimport {useCallback, useMemo} from \"react\";\r\n\r\nexport type TextInputWithResetProps = {\r\n\tvalue?: string | null;\r\n\tonChange: (s: string) => any;\r\n\tonReset?: () => any;\r\n\tdisabled?: boolean;\r\n\tonBlur?: () => any;\r\n\tclassName?: string;\r\n};\r\n\r\nexport function TextInputWithReset({value, onChange, onReset, onBlur, disabled, className}: TextInputWithResetProps) {\r\n\tconst actual = useMemo(\r\n\t\t() => StringUtil.getNonEmpty(value),\r\n\t\t[value]\r\n\t);\r\n\r\n\tconst isEmpty = useMemo(\r\n\t\t() => StringUtil.isBlank(value),\r\n\t\t[actual]\r\n\t);\r\n\r\n\tconst reset = useCallback(\r\n\t\t() => {\r\n\t\t\tif (onReset) {\r\n\t\t\t\tonReset();\r\n\t\t\t} else {\r\n\t\t\t\tonChange('');\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onReset, onChange]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<InputGroup className={className}>\r\n\t\t\t<Form.Control\r\n\t\t\t\ttype=\"text\"\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\tvalue={actual}\r\n\t\t\t\tonChange={(e) => onChange(e.target.value)}\r\n\t\t\t\tonBlur={onBlur}\r\n\t\t\t/>\r\n\t\t\t<Button onClick={reset} disabled={isEmpty}>\r\n\t\t\t\t<div className=\"d-flex align-items-center\">\r\n\t\t\t\t\t<BsXCircle/>\r\n\t\t\t\t</div>\r\n\t\t\t</Button>\r\n\t\t</InputGroup>\r\n\t);\r\n}\r\n\r\nexport default TextInputWithReset;\r\n","import { Button } from \"react-bootstrap\";\nimport { PropsWithChildren, ReactNode } from \"react\";\nimport { ButtonVariant } from \"react-bootstrap/types\";\n\nexport type IconButtonProps = {\n disabled?: boolean;\n onClick?: () => any;\n size?: \"sm\" | \"lg\";\n icon?: ReactNode;\n variant?: ButtonVariant;\n type?: \"submit\" | \"reset\" | \"button\" | undefined;\n};\n\nexport function IconButton({\n disabled,\n variant,\n icon,\n size,\n children,\n type,\n onClick,\n}: PropsWithChildren<IconButtonProps>) {\n return (\n <Button\n disabled={disabled === true}\n size={size}\n onClick={onClick}\n variant={variant}\n type={type}\n >\n <div className=\"d-flex align-items-center gap-2\">\n {icon}\n {children && <div>{children}</div>}\n </div>\n </Button>\n );\n}\n\nexport default IconButton;\n","import { Spinner } from \"react-bootstrap\";\nimport { PropsWithChildren } from \"react\";\nimport { IconButton, IconButtonProps } from \"./IconButton\";\n\nexport type ActiveButtonProps = IconButtonProps & {\n loading?: boolean;\n};\n\nexport function LoadingButton({\n disabled,\n icon,\n loading,\n children,\n size,\n variant,\n type,\n onClick,\n}: PropsWithChildren<ActiveButtonProps>) {\n return loading === true ? (\n <IconButton\n disabled={true}\n onClick={onClick}\n size={size}\n variant={variant}\n type={type}\n icon={<Spinner size=\"sm\" />}\n >\n {children}\n </IconButton>\n ) : (\n <IconButton\n disabled={disabled}\n onClick={onClick}\n icon={icon}\n size={size}\n variant={variant}\n >\n {children}\n </IconButton>\n );\n}\n\nexport default LoadingButton;\n","import {Form, Spinner} from \"react-bootstrap\";\r\nimport {StringUtil} from \"zavadil-ts-common\";\r\nimport {useEffect} from \"react\";\r\n\r\nexport type GenericSelectOption<T> = {\r\n\tid?: T | null;\r\n\tlabel: string;\r\n}\r\n\r\nexport type GenericSelectProps<T> = {\r\n\tvalue?: T | null;\r\n\toptions: Array<GenericSelectOption<T>>;\r\n\tonChange: (id: T | null | undefined) => any;\r\n\tshowEmptyOption?: boolean;\r\n\tdisabled?: boolean;\r\n\temptyOptionLabel?: string;\r\n}\r\n\r\nexport type StringSelectProps = GenericSelectProps<string>;\r\n\r\nexport function StringSelect({value, options, disabled, onChange, showEmptyOption, emptyOptionLabel}: StringSelectProps) {\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\tif (StringUtil.isBlank(value)) {\r\n\t\t\t\tif (options.length > 0 && showEmptyOption !== true) {\r\n\t\t\t\t\tonChange(options[0].id);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t[value, options, showEmptyOption, onChange]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<Form.Select\r\n\t\t\tvalue={value || ''}\r\n\t\t\tonChange={(e) => onChange(e.target.value)}\r\n\t\t\tdisabled={disabled}\r\n\t\t>\r\n\t\t\t{\r\n\t\t\t\t(showEmptyOption === true) && (\r\n\t\t\t\t\t<option key={\"\"} value={\"\"}>{emptyOptionLabel || ''}</option>\r\n\t\t\t\t)\r\n\t\t\t}\r\n\t\t\t{\r\n\t\t\t\toptions ?\r\n\t\t\t\t\toptions.map(\r\n\t\t\t\t\t\t(o, i) => <option key={i} value={o.id || ''}>{o.label || ''}</option>\r\n\t\t\t\t\t) : <span><Spinner/></span>\r\n\t\t\t}\r\n\t\t</Form.Select>\r\n\t)\r\n}\r\n","import {useCallback, useMemo} from \"react\";\r\nimport {NumberUtil} from \"zavadil-ts-common\";\r\nimport {GenericSelectProps, StringSelect} from \"./StringSelect\";\r\n\r\nexport type NumberSelectProps = GenericSelectProps<number>;\r\n\r\nexport function NumberSelect({value, options, disabled, onChange, showEmptyOption, emptyOptionLabel}: NumberSelectProps) {\r\n\tconst nValue = useMemo(\r\n\t\t() => {\r\n\t\t\tif (!value) return '';\r\n\t\t\treturn String(value);\r\n\t\t},\r\n\t\t[value]\r\n\t);\r\n\r\n\tconst nOptions = useMemo(\r\n\t\t() => {\r\n\t\t\tif (!options) return [];\r\n\t\t\treturn options.map(\r\n\t\t\t\t(o) => {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tid: o.id ? String(o.id) : '',\r\n\t\t\t\t\t\tlabel: o.label\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t},\r\n\t\t[options]\r\n\t);\r\n\r\n\tconst nChange = useCallback(\r\n\t\t(s: string | null | undefined) => onChange(NumberUtil.parseNumber(s)),\r\n\t\t[onChange]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<StringSelect\r\n\t\t\tdisabled={disabled}\r\n\t\t\tvalue={nValue}\r\n\t\t\toptions={nOptions}\r\n\t\t\tonChange={nChange}\r\n\t\t\tshowEmptyOption={showEmptyOption}\r\n\t\t\temptyOptionLabel={emptyOptionLabel}\r\n\t\t/>\r\n\t);\r\n}\r\n","import {useCallback, useEffect, useMemo, useRef, useState} from \"react\";\r\nimport {CancellablePromise, EntityBase} from \"zavadil-ts-common\";\r\nimport TextInputWithReset from \"./TextInputWithReset\";\r\nimport {Dropdown} from \"react-bootstrap\";\r\n\r\nexport type AutocompleteSelectProps<T extends EntityBase> = {\r\n\tselected?: T | null;\r\n\tonChange: (e: T | null) => any;\r\n\tonSearch: (text: string) => Promise<Array<T>>;\r\n\tdisabled?: boolean;\r\n\tlabelGetter?: (item: T) => string;\r\n}\r\n\r\nexport function AutocompleteSelect<T extends EntityBase>({selected, disabled, labelGetter, onChange, onSearch}: AutocompleteSelectProps<T>) {\r\n\tconst [searchPromise, setSearchPromise] = useState<CancellablePromise>();\r\n\tconst [searchText, setSearchText] = useState<string>();\r\n\tconst [itemSelection, setItemSelection] = useState<Array<T>>();\r\n\tconst blurTimeout = useRef<number>();\r\n\r\n\tconst finalLabelGetter = useCallback(\r\n\t\t(item: T) => {\r\n\t\t\tif (labelGetter) return labelGetter(item);\r\n\t\t\tif ('name' in item && typeof item.name === 'string') return item.name;\r\n\t\t\treturn `[${item.id}]`;\r\n\t\t},\r\n\t\t[labelGetter]\r\n\t);\r\n\r\n\tconst finalCss = useMemo(\r\n\t\t() => selected ? 'border rounded border-primary' : undefined,\r\n\t\t[selected]\r\n\t);\r\n\r\n\tconst userLeftControl = useCallback(\r\n\t\t() => {\r\n\t\t\tconsole.log('user left control');\r\n\t\t\tif (itemSelection) {\r\n\t\t\t\tsetItemSelection(undefined);\r\n\t\t\t\tsetSearchText(selected ? finalLabelGetter(selected) : '');\r\n\t\t\t}\r\n\t\t},\r\n\t\t[onChange, itemSelection, selected, finalLabelGetter]\r\n\t);\r\n\r\n\tconst startBlur = useCallback(\r\n\t\t() => {\r\n\t\t\tblurTimeout.current = window.setTimeout(userLeftControl, 100);\r\n\t\t},\r\n\t\t[blurTimeout, userLeftControl]\r\n\t);\r\n\r\n\tconst cancelBlur = useCallback(\r\n\t\t() => {\r\n\t\t\tif (blurTimeout.current) {\r\n\t\t\t\tclearTimeout(blurTimeout.current);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[blurTimeout]\r\n\t);\r\n\r\n\t// Clean up the timeout when the component unmounts\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\treturn cancelBlur;\r\n\t\t},\r\n\t\t[]\r\n\t);\r\n\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\tsetSearchText(selected ? finalLabelGetter(selected) : '');\r\n\t\t\tif (searchPromise) {\r\n\t\t\t\tsearchPromise.cancel();\r\n\t\t\t\tsetSearchPromise(undefined);\r\n\t\t\t}\r\n\t\t\tsetItemSelection(undefined);\r\n\t\t},\r\n\t\t[selected]\r\n\t);\r\n\r\n\tconst reset = useCallback(\r\n\t\t() => {\r\n\t\t\tonChange(null)\r\n\t\t\tsetSearchText('');\r\n\t\t\tif (searchPromise) {\r\n\t\t\t\tsearchPromise.cancel();\r\n\t\t\t\tsetSearchPromise(undefined);\r\n\t\t\t}\r\n\t\t\tsetItemSelection(undefined);\r\n\t\t},\r\n\t\t[onChange, searchPromise]\r\n\t);\r\n\r\n\tconst userChangedText = useCallback(\r\n\t\t(s: string) => {\r\n\t\t\tsetSearchText(s);\r\n\t\t\tif (searchPromise) {\r\n\t\t\t\tsearchPromise.cancel();\r\n\t\t\t}\r\n\t\t\tconst cancellable = new CancellablePromise(onSearch(s));\r\n\t\t\tcancellable.promise.then(setItemSelection);\r\n\t\t\tsetSearchPromise(cancellable);\r\n\t\t},\r\n\t\t[searchPromise, onSearch]\r\n\t);\r\n\r\n\r\n\tconst userSelectedItem = useCallback(\r\n\t\t(item: T) => {\r\n\t\t\tconsole.log('user selected item');\r\n\t\t\tsetItemSelection(undefined);\r\n\t\t\tonChange({...item});\r\n\t\t},\r\n\t\t[onChange]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<div onBlur={startBlur} onFocus={cancelBlur}>\r\n\t\t\t<Dropdown defaultShow={false} show={itemSelection !== null}>\r\n\t\t\t\t<TextInputWithReset\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\tvalue={searchText}\r\n\t\t\t\t\tonChange={userChangedText}\r\n\t\t\t\t\tonReset={reset}\r\n\t\t\t\t\tclassName={finalCss}\r\n\t\t\t\t/>\r\n\t\t\t\t{\r\n\t\t\t\t\titemSelection &&\r\n\t\t\t\t\t<Dropdown.Menu>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\titemSelection.map(\r\n\t\t\t\t\t\t\t\t(item) => <Dropdown.Item\r\n\t\t\t\t\t\t\t\t\tkey={item.id}\r\n\t\t\t\t\t\t\t\t\tonClick={\r\n\t\t\t\t\t\t\t\t\t\t(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\tcancelBlur();\r\n\t\t\t\t\t\t\t\t\t\t\tuserSelectedItem(item);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tactive={item.id === selected?.id}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{finalLabelGetter(item)}\r\n\t\t\t\t\t\t\t\t</Dropdown.Item>\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</Dropdown.Menu>\r\n\t\t\t\t}\r\n\t\t\t</Dropdown>\r\n\t\t</div>\r\n\t);\r\n}\r\n","import {useCallback} from \"react\";\r\nimport {EntityBase, EntityClient, StringUtil} from \"zavadil-ts-common\";\r\nimport {AutocompleteSelect} from \"./AutocompleteSelect\";\r\n\r\nexport type AutocompleteEntitySelectProps<T extends EntityBase> = {\r\n\tselected?: T | null;\r\n\tonChange: (e: T | null) => any;\r\n\tentityClient: EntityClient<T>;\r\n\tdisabled?: boolean;\r\n\tlabelGetter?: (item: T) => string;\r\n}\r\n\r\nexport function AutocompleteEntitySelect<T extends EntityBase>({\r\n\tselected,\r\n\tdisabled,\r\n\tlabelGetter,\r\n\tonChange,\r\n\tentityClient\r\n}: AutocompleteEntitySelectProps<T>) {\r\n\r\n\tconst search = useCallback(\r\n\t\t(s: string) => entityClient\r\n\t\t\t.loadPage({search: StringUtil.safeLowercase(s), page: 0, size: 10, sorting: [{name: 'id'}]})\r\n\t\t\t.then((p) => p.content),\r\n\t\t[labelGetter]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<AutocompleteSelect\r\n\t\t\tdisabled={disabled}\r\n\t\t\tselected={selected}\r\n\t\t\tlabelGetter={labelGetter}\r\n\t\t\tonSearch={search}\r\n\t\t\tonChange={onChange}\r\n\t\t/>\r\n\t);\r\n}\r\n","import {useCallback, useMemo} from \"react\";\r\nimport {LookupClient, LookupTableEntity, StringUtil} from \"zavadil-ts-common\";\r\nimport {AutocompleteSelect} from \"./AutocompleteSelect\";\r\n\r\nexport type AutocompleteLookupSelectProps<T extends LookupTableEntity> = {\r\n\tselected?: T | null;\r\n\tonChange: (e: T | null) => any;\r\n\tlookupClient: LookupClient<T>;\r\n\tdisabled?: boolean;\r\n\tlabelGetter?: (item: T) => string;\r\n}\r\n\r\nexport function AutocompleteLookupSelect<T extends LookupTableEntity>({\r\n\tselected,\r\n\tdisabled,\r\n\tlabelGetter,\r\n\tonChange,\r\n\tlookupClient\r\n}: AutocompleteLookupSelectProps<T>) {\r\n\tconst finalLabelGetter = useMemo(\r\n\t\t() => labelGetter ? labelGetter : (item: LookupTableEntity) => item.name,\r\n\t\t[labelGetter]\r\n\t);\r\n\r\n\tconst search = useCallback(\r\n\t\t(s: string) => lookupClient\r\n\t\t\t.loadPage({search: StringUtil.safeLowercase(s), page: 0, size: 10, sorting: [{name: 'name'}]})\r\n\t\t\t.then((p) => p.content),\r\n\t\t[labelGetter]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<AutocompleteSelect\r\n\t\t\tdisabled={disabled}\r\n\t\t\tselected={selected}\r\n\t\t\tlabelGetter={finalLabelGetter}\r\n\t\t\tonSearch={search}\r\n\t\t\tonChange={onChange}\r\n\t\t/>\r\n\t);\r\n}\r\n","import {useMemo} from \"react\";\r\nimport {NumberSelect} from \"./NumberSelect\";\r\nimport {EntityBase} from \"zavadil-ts-common\";\r\nimport {GenericSelectOption} from \"./StringSelect\";\r\n\r\nexport type EntityIdSelectProps<T extends EntityBase> = {\r\n\tid?: number | null;\r\n\tonChange: (n: number | null | undefined) => any;\r\n\toptions?: Array<T> | null;\r\n\tshowEmptyOption?: boolean;\r\n\tdisabled?: boolean;\r\n\temptyOptionLabel?: string;\r\n\tsort?: boolean;\r\n\tlabelGetter: (item: T) => string;\r\n}\r\n\r\nexport function EntityIdSelect<T extends EntityBase>(\r\n\t{id, sort, disabled, labelGetter, onChange, options, showEmptyOption, emptyOptionLabel}: EntityIdSelectProps<T>\r\n) {\r\n\tconst lOptions: GenericSelectOption<number>[] = useMemo(\r\n\t\t() => {\r\n\t\t\tlet result: Array<T> = []\r\n\t\t\tif (options) {\r\n\t\t\t\tresult = sort ? options.sort((a, b) => labelGetter(a) > labelGetter(b) ? 1 : -1) : options;\r\n\t\t\t}\r\n\t\t\treturn result\r\n\t\t\t\t.map(\r\n\t\t\t\t\t(o) => {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tid: o.id,\r\n\t\t\t\t\t\t\tlabel: labelGetter(o)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t},\r\n\t\t[options]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<NumberSelect\r\n\t\t\tdisabled={disabled}\r\n\t\t\tvalue={id}\r\n\t\t\toptions={lOptions}\r\n\t\t\tonChange={onChange}\r\n\t\t\tshowEmptyOption={showEmptyOption}\r\n\t\t\temptyOptionLabel={emptyOptionLabel}\r\n\t\t/>\r\n\t);\r\n}\r\n","import {EntityBase} from \"zavadil-ts-common\";\r\nimport {EntityIdSelect} from \"./EntityIdSelect\";\r\n\r\nexport type EntitySelectProps<T extends EntityBase> = {\r\n\tvalue?: T | null;\r\n\tonChange: (e: T | null | undefined) => any;\r\n\toptions?: Array<T> | null;\r\n\tshowEmptyOption?: boolean;\r\n\tdisabled?: boolean;\r\n\temptyOptionLabel?: string;\r\n\tsort?: boolean;\r\n\tlabelGetter: (item: T) => string;\r\n}\r\n\r\nexport function EntitySelect<T extends EntityBase>(\r\n\t{value, sort, disabled, labelGetter, onChange, options, showEmptyOption, emptyOptionLabel}: EntitySelectProps<T>\r\n) {\r\n\r\n\treturn (\r\n\t\t<EntityIdSelect\r\n\t\t\tdisabled={disabled}\r\n\t\t\tid={value ? value.id : null}\r\n\t\t\toptions={options}\r\n\t\t\tsort={sort}\r\n\t\t\tonChange={\r\n\t\t\t\t(id) => {\r\n\t\t\t\t\tif (!options || !id) {\r\n\t\t\t\t\t\tonChange(undefined);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tonChange(options.find((o) => o.id === id));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlabelGetter={labelGetter}\r\n\t\t\tshowEmptyOption={showEmptyOption}\r\n\t\t\temptyOptionLabel={emptyOptionLabel}\r\n\t\t/>\r\n\t);\r\n}\r\n","import {ObjectUtil, PagingRequest} from 'zavadil-ts-common';\r\nimport React from 'react';\r\nimport {Pagination} from \"react-bootstrap\";\r\n\r\nconst MAX_DISPLAY_PAGES = 10;\r\n\r\nexport type TablePaginationProps = {\r\n\tpaging: PagingRequest;\r\n\ttotalItems: number;\r\n\tonPagingChanged: (p: PagingRequest) => any\r\n};\r\n\r\nexport function TablePagination({\r\n\tpaging,\r\n\ttotalItems,\r\n\tonPagingChanged\r\n}: TablePaginationProps) {\r\n\tconst totalPages = Math.ceil(totalItems / paging.size);\r\n\r\n\tconst pageChanged = (page: number) => {\r\n\t\tpaging.page = page;\r\n\t\tonPagingChanged(ObjectUtil.clone(paging));\r\n\t}\r\n\r\n\tconst paginationItems = [];\r\n\r\n\tif (totalPages > 1) {\r\n\t\tpaginationItems.push(<Pagination.First key=\"first\" onClick={() => pageChanged(0)} disabled={paging.page === 0}/>);\r\n\t\tpaginationItems.push(<Pagination.Prev key=\"prev\" onClick={() => pageChanged(paging.page - 1)} disabled={paging.page === 0}/>);\r\n\r\n\t\tconst maxPagesSide = Math.round((MAX_DISPLAY_PAGES - 3) / 2);\r\n\r\n\t\tlet start = (paging.page > maxPagesSide) ? paging.page - maxPagesSide : 0;\r\n\t\tlet end = start + MAX_DISPLAY_PAGES;\r\n\r\n\t\tif (end >= totalPages) {\r\n\t\t\tend = totalPages - 1;\r\n\t\t}\r\n\r\n\t\tif (start > 0) {\r\n\t\t\tpaginationItems.push(<Pagination.Ellipsis key=\"ellipsisStart\" disabled={true}/>);\r\n\t\t}\r\n\r\n\t\tfor (let number = start; number <= end; number++) {\r\n\t\t\tpaginationItems.push(\r\n\t\t\t\t<Pagination.Item key={number} active={number === paging.page} onClick={() => pageChanged(number)}>\r\n\t\t\t\t\t{number + 1}\r\n\t\t\t\t</Pagination.Item>,\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (end < (totalPages - 1)) {\r\n\t\t\tpaginationItems.push(<Pagination.Ellipsis key=\"ellipsisEnd\" disabled={true}/>);\r\n\t\t}\r\n\r\n\t\tpaginationItems.push(<Pagination.Next key=\"next\" onClick={() => pageChanged(paging.page + 1)} disabled={paging.page === (totalPages - 1)}/>);\r\n\t\tpaginationItems.push(<Pagination.Last key=\"last\" onClick={() => pageChanged(totalPages - 1)} disabled={paging.page === (totalPages - 1)}/>);\r\n\t}\r\n\r\n\treturn <Pagination size=\"sm\" className=\"flex-wrap m-0\">{paginationItems}</Pagination>\r\n}\r\n\r\nexport default TablePagination;\r\n","import {ObjectUtil, PagingRequest, StringUtil} from 'zavadil-ts-common';\r\nimport React, {PropsWithChildren, useMemo} from 'react';\r\nimport {Table} from \"react-bootstrap\";\r\nimport {BsFillCaretDownFill, BsFillCaretUpFill} from 'react-icons/bs';\r\nimport {TableHeader} from \"./TableTypes\";\r\nimport {NumberSelect} from \"../forms\";\r\nimport Localize from \"../localization/Localize\";\r\nimport TablePagination from \"./TablePagination\";\r\n\r\nconst DEFAULT_SIZES = [\r\n\t{\r\n\t\tid: 10,\r\n\t\tlabel: '10'\r\n\t},\r\n\t{\r\n\t\tid: 100,\r\n\t\tlabel: '100'\r\n\t},\r\n\t{\r\n\t\tid: 1000,\r\n\t\tlabel: '1000'\r\n\t}\r\n];\r\n\r\nexport type AdvancedTableProps = {\r\n\theader: TableHeader;\r\n\tlanguage?: \"cs\" | \"en\";\r\n\tpaging: PagingRequest;\r\n\ttotalItems: number;\r\n\thover?: boolean;\r\n\tshowPagingOnBottom?: boolean;\r\n\tshowPageSizeSelection?: boolean;\r\n\tstriped?: boolean;\r\n\tbordered?: boolean;\r\n\tonPagingChanged: (p: PagingRequest) => any\r\n};\r\n\r\nexport function AdvancedTable({\r\n\thover,\r\n\tshowPagingOnBottom,\r\n\tshowPageSizeSelection,\r\n\tstriped,\r\n\tbordered,\r\n\theader,\r\n\tchildren,\r\n\tpaging,\r\n\ttotalItems,\r\n\tonPagingChanged\r\n}: PropsWithChildren<AdvancedTableProps>) {\r\n\tconst totalPages = Math.ceil(totalItems / paging.size);\r\n\r\n\tconst sizes = useMemo(\r\n\t\t() => {\r\n\t\t\tconst s = paging.size;\r\n\t\t\tif (DEFAULT_SIZES.find((si) => si.id === s) === null) {\r\n\t\t\t\tconst ss = ObjectUtil.clone(DEFAULT_SIZES);\r\n\t\t\t\tss.push({id: s, label: String(s)});\r\n\t\t\t\treturn ss;\r\n\t\t\t}\r\n\t\t\treturn DEFAULT_SIZES;\r\n\t\t},\r\n\t\t[paging]\r\n\t);\r\n\r\n\tconst sortingChanged = (e: React.MouseEvent<HTMLTableCellElement>, fieldName: string) => {\r\n\t\tif (!paging.sorting) paging.sorting = [];\r\n\t\tlet field = paging.sorting.find((f) => f.name === fieldName);\r\n\t\tconst isSoleField = field && paging.sorting.length === 1;\r\n\t\tif (!(e.ctrlKey || isSoleField)) {\r\n\t\t\tpaging.sorting = [];\r\n\t\t\tfield = undefined;\r\n\t\t}\r\n\t\tif (field) {\r\n\t\t\tfield.desc = !field.desc;\r\n\t\t} else {\r\n\t\t\tpaging.sorting.push({name: fieldName});\r\n\t\t}\r\n\t\tonPagingChanged(ObjectUtil.clone(paging));\r\n\t}\r\n\r\n\treturn (\r\n\t\t<div>\r\n\t\t\t<Table hover={hover} striped={striped} responsive bordered={bordered}>\r\n\t\t\t\t<thead>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td colSpan={header.length}>\r\n\t\t\t\t\t\t<div className=\"d-flex justify-content-between align-items-center gap-2\">\r\n\t\t\t\t\t\t\t<div><Localize text='Page'/>: {paging.page + 1} / {totalPages}</div>\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttotalPages > 0 && <TablePagination paging={paging} totalItems={totalItems} onPagingChanged={onPagingChanged}/>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t<div><Localize text='Total items'/>: {totalItems}</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\theader.map(\r\n\t\t\t\t\t\t\t(h, index) => {\r\n\t\t\t\t\t\t\t\tconst sortBy = h.sort === false ? '' : (StringUtil.isBlank(h.sort) ? h.name : h.sort);\r\n\t\t\t\t\t\t\t\tif (StringUtil.isBlank(sortBy) || (!sortBy)) {\r\n\t\t\t\t\t\t\t\t\treturn <th key={index}>{h.label}</th>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tconst field = paging.sorting && paging.sorting.find((s) => s.name === sortBy);\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<th\r\n\t\t\t\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"user-select-none text-nowrap\"\r\n\t\t\t\t\t\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={(e: React.MouseEvent<HTMLTableCellElement>) => sortingChanged(e, sortBy)}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{h.label}\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tfield ? field.desc ? <BsFillCaretDownFill/> : <BsFillCaretUpFill/> : <></>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</th>\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t}\r\n\t\t\t\t</tr>\r\n\t\t\t\t</thead>\r\n\t\t\t\t<tbody>\r\n\t\t\t\t{children}\r\n\t\t\t\t</tbody>\r\n\t\t\t\t{\r\n\t\t\t\t\ttotalItems > 0 && <tfoot>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tshowPagingOnBottom &&\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td colSpan={header.length}>\r\n\t\t\t\t\t\t\t\t<div className=\"d-flex justify-content-between align-items-center gap-2\">\r\n\t\t\t\t\t\t\t\t\t<div><Localize text='Page'/>: {paging.page + 1} / {totalPages}</div>\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\ttotalPages > 0 && <TablePagination paging={paging} totalItems={totalItems} onPagingChanged={onPagingChanged}/>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t<div><Localize text='Total items'/>: {totalItems}</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tshowPageSizeSelection &&\r\n\t\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t\t<td colSpan={header.length}>\r\n\t\t\t\t\t\t\t\t<div className=\"d-flex align-items-center gap-2 justify-content-end\">\r\n\t\t\t\t\t\t\t\t\t<div className=\"text-nowrap\"><Localize text='Page size'/>:</div>\r\n\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t<NumberSelect\r\n\t\t\t\t\t\t\t\t\t\t\tvalue={paging.size}\r\n\t\t\t\t\t\t\t\t\t\t\toptions={sizes}\r\n\t\t\t\t\t\t\t\t\t\t\tonChange={\r\n\t\t\t\t\t\t\t\t\t\t\t\t(e) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpaging.size = e || 10\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tonPagingChanged({...paging});\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tshowEmptyOption={false}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t</tfoot>\r\n\t\t\t\t}\r\n\t\t\t</Table>\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default AdvancedTable;\r\n","import {ReactNode, useMemo} from \"react\";\r\nimport {SwitchProps} from \"./Switch\";\r\nimport {BsCheckCircle, BsCircle} from \"react-icons/bs\";\r\n\r\nexport type IconCheckProps = SwitchProps & {\r\n\ticonOn?: ReactNode;\r\n\ticonOff?: ReactNode;\r\n};\r\n\r\nexport function IconCheck({disabled, checked, iconOn, iconOff, size, onChange}: IconCheckProps) {\r\n\tconst renderedIcon = useMemo(\r\n\t\t() => checked ? (iconOn ? iconOn : <BsCheckCircle size={size}/>) : (iconOff ? iconOff : <BsCircle size={size} className=\"text-muted\"/>),\r\n\t\t[checked, iconOn, iconOff, size]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<div\r\n\t\t\tclassName=\"d-flex align-items-center cursor-pointer\"\r\n\t\t\tonClick={(e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tonChange(!checked)\r\n\t\t\t}\r\n\t\t\t}\r\n\t\t>\r\n\t\t\t{renderedIcon}\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default IconCheck;\r\n","import {DateUtil, ObjectUtil} from \"zavadil-ts-common\";\r\n\r\nexport type DurationProps = {\r\n\tms?: number | null;\r\n};\r\n\r\nexport function Duration({ms}: DurationProps) {\r\n\tif (ObjectUtil.isEmpty(ms)) return <></>;\r\n\treturn <div className=\"text-nowrap\">{DateUtil.formatDuration(ms)}</div>;\r\n}\r\n","import {BsBug, BsExclamationDiamond, BsInfo, BsQuestion} from \"react-icons/bs\";\r\nimport {IconType} from \"react-icons\";\r\nimport {UserAlertType} from \"zavadil-ts-common\";\r\n\r\nexport type UserAlertTypeIconProps = {\r\n\ttype: UserAlertType;\r\n\tsize?: string | number;\r\n\tcustomVariant?: string;\r\n};\r\n\r\nconst ICONS = new Map<UserAlertType, IconType>(\r\n\t[\r\n\t\t[UserAlertType.error, BsBug],\r\n\t\t[UserAlertType.warning, BsExclamationDiamond],\r\n\t\t[UserAlertType.info, BsInfo]\r\n\t]\r\n);\r\n\r\nexport function UserAlertTypeIcon({type, size, customVariant}: UserAlertTypeIconProps) {\r\n\tconst iconFunc = ICONS.get(type) || BsQuestion;\r\n\treturn <div className={`d-flex align-items-center text-${customVariant === undefined ? type : customVariant}`}>{iconFunc({size: size})}</div>\r\n}\r\n\r\nexport default UserAlertTypeIcon;\r\n","import {DateUtil, UserAlert} from 'zavadil-ts-common';\r\nimport {ProgressBar, Stack} from \"react-bootstrap\";\r\nimport UserAlertTypeIcon from \"./UserAlertTypeIcon\";\r\n\r\nexport type UserAlertWidgetProps = {\r\n\tuserAlert: UserAlert;\r\n\tmaxDurationMs: number;\r\n};\r\n\r\nexport function UserAlertWidget({userAlert, maxDurationMs}: UserAlertWidgetProps) {\r\n\treturn (\r\n\t\t<Stack direction=\"horizontal\" gap={2} className=\"align-items-center\">\r\n\t\t\t{\r\n\t\t\t\tuserAlert.remainsMs && <div style={{width: 20}}>\r\n\t\t\t\t\t<ProgressBar min={0} max={maxDurationMs} now={userAlert.remainsMs} variant={userAlert.type}/>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t\t<div>{DateUtil.formatDateForHumans(userAlert.time)}</div>\r\n\t\t\t<UserAlertTypeIcon type={userAlert.type}/>\r\n\t\t\t<div>{userAlert.message}</div>\r\n\t\t</Stack>\r\n\t);\r\n}\r\n\r\nexport default UserAlertWidget;\r\n","import {Button, Modal, Stack} from \"react-bootstrap\";\r\nimport {BasicDialogProps} from \"./DialogProps\";\r\nimport {createContext} from \"react\";\r\nimport {Localize} from \"../localization\";\r\n\r\nexport class ConfirmDialogContextData {\r\n\tsetProps: (props?: ConfirmDialogProps) => any;\r\n\r\n\tconstructor(setProps: (props?: ConfirmDialogProps) => any) {\r\n\t\tthis.setProps = setProps;\r\n\t}\r\n\r\n\tconfirm(name: string, text: string, onConfirmed: () => any) {\r\n\t\tthis.setProps(\r\n\t\t\t{\r\n\t\t\t\tname: name,\r\n\t\t\t\ttext: text,\r\n\t\t\t\tonConfirm: () => {\r\n\t\t\t\t\tonConfirmed();\r\n\t\t\t\t\tthis.setProps(undefined);\r\n\t\t\t\t},\r\n\t\t\t\tonClose: () => this.setProps(undefined)\r\n\t\t\t}\r\n\t\t)\r\n\t}\r\n}\r\n\r\nexport const ConfirmDialogContext = createContext<ConfirmDialogContextData>(new ConfirmDialogContextData(() => undefined));\r\n\r\nexport type ConfirmDialogProps = BasicDialogProps & {\r\n\tonConfirm: () => any;\r\n};\r\n\r\nexport function ConfirmDialog({name, text, onClose, onConfirm}: ConfirmDialogProps) {\r\n\treturn (\r\n\t\t<Modal show={true} backdrop={true} onHide={onClose}>\r\n\t\t\t<Modal.Header>{name || 'Confirm'}</Modal.Header>\r\n\t\t\t<Modal.Body>{text}</Modal.Body>\r\n\t\t\t<Modal.Footer>\r\n\t\t\t\t<Stack direction=\"horizontal\">\r\n\t\t\t\t\t<Button variant=\"link\" onClick={onClose}><Localize text=\"Back\"/></Button>\r\n\t\t\t\t\t<Button variant=\"primary\" onClick={onConfirm}><Localize text=\"Yes\"/></Button>\r\n\t\t\t\t</Stack>\r\n\t\t\t</Modal.Footer>\r\n\t\t</Modal>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport {Badge} from \"react-bootstrap\";\r\n\r\nexport type QueueStateControlProps = {\r\n\tstate: string;\r\n}\r\n\r\nconst STATE_COLORS = new Map<string, string>([\r\n\t['Idle', 'secondary'],\r\n\t['Processing', 'success'],\r\n\t['Loading', 'warn'],\r\n]);\r\n\r\nexport function QueueStateControl({state}: QueueStateControlProps) {\r\n\tconst color = STATE_COLORS.get(state) || 'light';\r\n\treturn <Badge className={`bg-${color} text-bg-${color}`}>{state}</Badge>\r\n}\r\n","import {useCallback, useEffect, useState} from \"react\";\r\nimport {EntityBase, EntityClient, EntityClientWithStub} from \"zavadil-ts-common\";\r\nimport {AutocompleteEntitySelect} from \"./AutocompleteEntitySelect\";\r\n\r\nexport type AutocompleteIdSelectProps<T extends EntityBase, TStub extends EntityBase> = {\r\n\tid?: number | null;\r\n\tonChange: (id?: number | null) => any;\r\n\tentityClient: EntityClient<T> | EntityClientWithStub<T, TStub>;\r\n\tdisabled?: boolean;\r\n\tlabelGetter?: (item: T) => string;\r\n}\r\n\r\nexport function AutocompleteEntityIdSelect<T extends EntityBase, TStub extends EntityBase>({\r\n\tid,\r\n\tdisabled,\r\n\tlabelGetter,\r\n\tonChange,\r\n\tentityClient\r\n}: AutocompleteIdSelectProps<T, TStub>) {\r\n\tconst [selected, setSelected] = useState<T | null>(null);\r\n\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\tif (!id) {\r\n\t\t\t\tsetSelected(null);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (selected && selected.id === id) {\r\n\t\t\t\tsetSelected({...selected});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (entityClient instanceof EntityClientWithStub) {\r\n\t\t\t\tentityClient.loadSingleStub(id).then(setSelected);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tentityClient.loadSingle(id).then(setSelected);\r\n\t\t},\r\n\t\t[id]\r\n\t);\r\n\r\n\tconst selectionChanged = useCallback(\r\n\t\t(s: T | null) => {\r\n\t\t\tconst nId = s ? s.id : null;\r\n\t\t\tif (nId !== id) onChange(nId);\r\n\t\t\tsetSelected(s);\r\n\t\t},\r\n\t\t[id, onChange]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<AutocompleteEntitySelect\r\n\t\t\tdisabled={disabled}\r\n\t\t\tselected={selected}\r\n\t\t\tlabelGetter={labelGetter}\r\n\t\t\tentityClient={entityClient}\r\n\t\t\tonChange={selectionChanged}\r\n\t\t/>\r\n\t);\r\n}\r\n","import {useCallback, useEffect, useState} from \"react\";\r\nimport {LookupClient, LookupTableEntity} from \"zavadil-ts-common\";\r\nimport {AutocompleteLookupSelect} from \"./AutocompleteLookupSelect\";\r\n\r\nexport type AutocompleteLookupIdSelectProps<T extends LookupTableEntity> = {\r\n\tid?: number | null;\r\n\tonChange: (id?: number | null) => any;\r\n\tlookupClient: LookupClient<T>;\r\n\tdisabled?: boolean;\r\n\tlabelGetter?: (item: T) => string;\r\n}\r\n\r\nexport function AutocompleteLookupIdSelect<T extends LookupTableEntity>({\r\n\tid,\r\n\tdisabled,\r\n\tlabelGetter,\r\n\tonChange,\r\n\tlookupClient\r\n}: AutocompleteLookupIdSelectProps<T>) {\r\n\tconst [selected, setSelected] = useState<T | null>(null);\r\n\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\tif (!id) {\r\n\t\t\t\tsetSelected(null);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (selected && selected.id === id) {\r\n\t\t\t\tsetSelected({...selected});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tlookupClient.loadSingle(id).then(setSelected);\r\n\t\t},\r\n\t\t[id]\r\n\t);\r\n\r\n\tconst selectionChanged = useCallback(\r\n\t\t(s: T | null) => {\r\n\t\t\tconst nId = s ? s.id : null;\r\n\t\t\tif (nId !== id) onChange(nId);\r\n\t\t\tsetSelected(s);\r\n\t\t},\r\n\t\t[id, selected]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<AutocompleteLookupSelect\r\n\t\t\tdisabled={disabled}\r\n\t\t\tselected={selected}\r\n\t\t\tlabelGetter={labelGetter}\r\n\t\t\tlookupClient={lookupClient}\r\n\t\t\tonChange={selectionChanged}\r\n\t\t/>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport {ProgressBar} from \"react-bootstrap\";\r\nimport {CacheStats} from 'zavadil-ts-common';\r\n\r\nexport type CacheStatsControlProps = {\r\n\tname: string;\r\n\tstats: CacheStats;\r\n}\r\n\r\nexport function CacheStatsControl({name, stats}: CacheStatsControlProps) {\r\n\treturn (\r\n\t\t<div>\r\n\t\t\t<div className=\"d-flex align-items-center gap-2\">\r\n\t\t\t\t<pre>{name}</pre>\r\n\t\t\t\t<pre>\r\n\t\t\t\t[\r\n\t\t\t\t\t{stats.cachedItems}\r\n\t\t\t\t\t{stats.capacity > 0 && ' / '}\r\n\t\t\t\t\t{stats.capacity > 0 && stats.capacity}\r\n\t\t\t\t\t]\r\n\t\t\t\t</pre>\r\n\t\t\t</div>\r\n\t\t\t{\r\n\t\t\t\tstats.capacity > 0 &&\r\n\t\t\t\t<div className=\"p-1\">\r\n\t\t\t\t\t<ProgressBar\r\n\t\t\t\t\t\tnow={stats.cachedItems}\r\n\t\t\t\t\t\tmin={0}\r\n\t\t\t\t\t\tmax={stats.capacity}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t</div>\r\n\t);\r\n}\r\n","import {DateUtil} from 'zavadil-ts-common';\r\nimport {Form} from \"react-bootstrap\";\r\n\r\nexport type DateInputProps = {\r\n\tvalue?: Date | null;\r\n\tonChange: (d: Date | undefined) => any;\r\n\tdisabled?: boolean;\r\n};\r\n\r\nexport function DateInput({value, onChange, disabled}: DateInputProps) {\r\n\treturn (\r\n\t\t<Form.Control\r\n\t\t\ttype=\"date\"\r\n\t\t\tdisabled={disabled}\r\n\t\t\tvalue={DateUtil.formatDateForInput(value)}\r\n\t\t\tonChange={(e) => {\r\n\t\t\t\tonChange(DateUtil.parseDate(e.target.value));\r\n\t\t\t}}\r\n\t\t/>\r\n\t);\r\n}\r\n\r\nexport default DateInput;\r\n","import {DateUtil} from 'zavadil-ts-common';\r\n\r\nexport type DateTimeProps = {\r\n\tvalue?: Date | null;\r\n};\r\n\r\nexport function DateTime({value}: DateTimeProps) {\r\n\treturn (\r\n\t\t<div className=\"text-nowrap\">{DateUtil.formatDateTimeForHumans(value)}</div>\r\n\t);\r\n}\r\n","import {DateUtil} from 'zavadil-ts-common';\r\nimport {Form} from \"react-bootstrap\";\r\n\r\nexport type DateTimeInputProps = {\r\n\tvalue?: Date | null;\r\n\tonChange: (d: Date | undefined) => any;\r\n\tdisabled?: boolean;\r\n};\r\n\r\nexport function DateTimeInput({value, onChange, disabled}: DateTimeInputProps) {\r\n\treturn (\r\n\t\t<Form.Control\r\n\t\t\ttype=\"datetime-local\"\r\n\t\t\tdisabled={disabled}\r\n\t\t\tvalue={DateUtil.formatDateTimeForInput(value)}\r\n\t\t\tonChange={(e) => {\r\n\t\t\t\tonChange(DateUtil.parseDate(e.target.value));\r\n\t\t\t}}\r\n\t\t/>\r\n\t);\r\n}\r\n\r\nexport default DateTimeInput;\r\n","import {PropsWithChildren, useMemo} from \"react\";\r\nimport {ActiveButtonProps, LoadingButton} from \"./LoadingButton\";\r\nimport {BsTrash} from \"react-icons/bs\";\r\n\r\nexport type DeleteButtonProps = ActiveButtonProps & {\r\n\tisChanged?: boolean;\r\n};\r\n\r\nexport function DeleteButton({disabled, icon, loading, children, size, onClick, isChanged}: PropsWithChildren<DeleteButtonProps>) {\r\n\tconst icn = useMemo(\r\n\t\t() => icon ? icon : <BsTrash/>,\r\n\t\t[icon]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<LoadingButton\r\n\t\t\tdisabled={disabled || (isChanged === false)}\r\n\t\t\tonClick={onClick}\r\n\t\t\ticon={icn}\r\n\t\t\tloading={loading}\r\n\t\t\tsize={size}\r\n\t\t\tvariant=\"danger\"\r\n\t\t>\r\n\t\t\t{children}\r\n\t\t</LoadingButton>\r\n\t);\r\n}\r\n","import {ObjectUtil} from \"zavadil-ts-common\";\r\nimport {useMemo} from \"react\";\r\nimport {Duration} from \"./Duration\";\r\n\r\nexport type ElapsedProps = {\r\n\tdate?: Date | null;\r\n};\r\n\r\nexport function Elapsed({date}: ElapsedProps) {\r\n\tconst ms = useMemo(\r\n\t\t() => {\r\n\t\t\tif (ObjectUtil.isEmpty(date)) return null;\r\n\t\t\treturn Date.now() - date.getTime();\r\n\t\t},\r\n\t\t[date]\r\n\t);\r\n\treturn <Duration ms={ms}/>;\r\n}\r\n","import {EntityWithName} from \"zavadil-ts-common\";\r\nimport {EntityIdSelect} from \"./EntityIdSelect\";\r\n\r\nexport type EntityWithNameIdSelectProps<T extends EntityWithName> = {\r\n\tid?: number | null;\r\n\tonChange: (n: number | null | undefined) => any;\r\n\toptions?: Array<T> | null;\r\n\tshowEmptyOption?: boolean;\r\n\tdisabled?: boolean;\r\n\temptyOptionLabel?: string;\r\n\tsort?: boolean;\r\n}\r\n\r\nexport function EntityWithNameIdSelect<T extends EntityWithName>(\r\n\t{id, sort, disabled, onChange, options, showEmptyOption, emptyOptionLabel}: EntityWithNameIdSelectProps<T>\r\n) {\r\n\treturn (\r\n\t\t<EntityIdSelect\r\n\t\t\tid={id}\r\n\t\t\tlabelGetter={(e) => e.name}\r\n\t\t\tdisabled={disabled}\r\n\t\t\tsort={sort}\r\n\t\t\toptions={options}\r\n\t\t\tonChange={onChange}\r\n\t\t\tshowEmptyOption={showEmptyOption}\r\n\t\t\temptyOptionLabel={emptyOptionLabel}\r\n\t\t/>\r\n\t);\r\n}\r\n","import {EntityWithName} from \"zavadil-ts-common\";\r\nimport {EntitySelect} from \"./EntitySelect\";\r\n\r\nexport type EntityWithNameSelectProps<T extends EntityWithName> = {\r\n\tvalue?: T | null;\r\n\tonChange: (e: T | null | undefined) => any;\r\n\toptions?: Array<T> | null;\r\n\tshowEmptyOption?: boolean;\r\n\tdisabled?: boolean;\r\n\temptyOptionLabel?: string;\r\n\tsort?: boolean;\r\n}\r\n\r\nexport function EntityWithNameSelect<T extends EntityWithName>(\r\n\t{value, sort, disabled, onChange, options, showEmptyOption, emptyOptionLabel}: EntityWithNameSelectProps<T>\r\n) {\r\n\treturn (\r\n\t\t<EntitySelect\r\n\t\t\tvalue={value}\r\n\t\t\tlabelGetter={(e) => e.name}\r\n\t\t\tdisabled={disabled}\r\n\t\t\tsort={sort}\r\n\t\t\toptions={options}\r\n\t\t\tonChange={onChange}\r\n\t\t\tshowEmptyOption={showEmptyOption}\r\n\t\t\temptyOptionLabel={emptyOptionLabel}\r\n\t\t/>\r\n\t);\r\n}\r\n","import {useMemo} from \"react\";\r\nimport {StringSelect} from \"./StringSelect\";\r\n\r\nexport type EnumSelectProps = {\r\n\tvalue?: string | null;\r\n\toptions: Array<string>;\r\n\tonChange: (id: string | null | undefined) => any;\r\n\tshowEmptyOption?: boolean;\r\n\temptyOptionLabel?: string;\r\n};\r\n\r\nexport function EnumSelect({value, options, onChange, showEmptyOption, emptyOptionLabel}: EnumSelectProps) {\r\n\tconst nOptions = useMemo(\r\n\t\t() => {\r\n\t\t\tif (!options) return [];\r\n\t\t\treturn options.map(\r\n\t\t\t\t(s) => {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tid: s,\r\n\t\t\t\t\t\tlabel: s\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t},\r\n\t\t[options]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<StringSelect\r\n\t\t\tvalue={value}\r\n\t\t\toptions={nOptions}\r\n\t\t\tonChange={onChange}\r\n\t\t\tshowEmptyOption={showEmptyOption}\r\n\t\t\temptyOptionLabel={emptyOptionLabel}\r\n\t\t/>\r\n\t);\r\n}\r\n","import { PropsWithChildren } from \"react\";\nimport { Form } from \"react-bootstrap\";\nimport { Localize } from \"../localization\";\n\nexport type FormRowProps = PropsWithChildren & {\n label: string;\n};\n\nexport function FormRow({ label, children }: FormRowProps) {\n return (\n <Form.Group>\n <Form.Label>\n <Localize text={label} />\n </Form.Label>\n <div>{children}</div>\n </Form.Group>\n );\n}\n","import {Form} from \"react-bootstrap\";\r\nimport {ReactNode} from \"react\";\r\n\r\nexport type IconSwitchProps = {\r\n\tdisabled?: boolean;\r\n\tchecked: boolean;\r\n\tonChange: (checked: boolean) => any;\r\n\tsize?: number;\r\n\ticonOn: ReactNode;\r\n\ticonOff: ReactNode;\r\n};\r\n\r\nexport function IconSwitch({disabled, checked, iconOn, iconOff, size, onChange}: IconSwitchProps) {\r\n\treturn (\r\n\t\t<div\r\n\t\t\tclassName=\"d-flex align-items-center gap-2 cursor-pointer\"\r\n\t\t\tonClick={(e) => onChange(!checked)}\r\n\t\t>\r\n\t\t\t<Form.Switch\r\n\t\t\t\tdisabled={disabled}\r\n\t\t\t\tsize={size}\r\n\t\t\t\ttype=\"switch\"\r\n\t\t\t\tchecked={checked}\r\n\t\t\t\treadOnly={true}\r\n\t\t\t\tclassName=\"cursor-pointer\"\r\n\t\t\t/>\r\n\t\t\t{\r\n\t\t\t\tchecked ? iconOn : iconOff\r\n\t\t\t}\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default IconSwitch;\r\n","import React from 'react';\r\nimport {Badge, ProgressBar} from \"react-bootstrap\";\r\nimport {ByteUtil, JavaHeapStats} from \"zavadil-ts-common\";\r\n\r\nexport type WorkerJavaHeapControlProps = {\r\n\tstats: JavaHeapStats;\r\n};\r\n\r\nexport function JavaHeapControl({stats}: WorkerJavaHeapControlProps) {\r\n\tconst size = stats.heapSize;\r\n\tconst max = stats.heapMaxSize;\r\n\tconst free = stats.heapFreeSize;\r\n\tconst used = size - free;\r\n\r\n\treturn (\r\n\t\t<div>\r\n\t\t\t<div className=\"d-flex align-items-center gap-2\">\r\n\t\t\t\t<pre>Java Heap</pre>\r\n\t\t\t\t<pre>[{ByteUtil.formatByteSize(size)} / {ByteUtil.formatByteSize(max)}]</pre>\r\n\t\t\t</div>\r\n\t\t\t<div className=\"d-flex align-items-center gap-2\">\r\n\t\t\t\t<pre>Used:</pre>\r\n\t\t\t\t<Badge className=\"bg-warning text-bg-warning\">\r\n\t\t\t\t\t{ByteUtil.formatByteSize(used)}\r\n\t\t\t\t</Badge>\r\n\t\t\t\t<pre>Free:</pre>\r\n\t\t\t\t<Badge className=\"bg-success text-white\">\r\n\t\t\t\t\t{ByteUtil.formatByteSize(free)}\r\n\t\t\t\t</Badge>\r\n\t\t\t</div>\r\n\t\t\t<div className=\"p-1\">\r\n\t\t\t\t<ProgressBar min={0} max={max}>\r\n\t\t\t\t\t<ProgressBar variant=\"warning\" min={0} now={used} max={max}/>\r\n\t\t\t\t\t<ProgressBar variant=\"success\" min={0} now={free} max={max}/>\r\n\t\t\t\t</ProgressBar>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n}\r\n","import {useMemo} from \"react\";\r\nimport {NumberSelect} from \"./NumberSelect\";\r\nimport {LookupTableEntity} from \"zavadil-ts-common\";\r\nimport {GenericSelectOption} from \"./StringSelect\";\r\n\r\nexport type LookupSelectProps = {\r\n\tid?: number | null;\r\n\tonChange: (n: number | null | undefined) => any;\r\n\toptions?: Array<LookupTableEntity> | null;\r\n\tshowEmptyOption?: boolean;\r\n\tdisabled?: boolean;\r\n\temptyOptionLabel?: string;\r\n\tsort?: boolean;\r\n\tlabelGetter?: <T extends LookupTableEntity>(item: T) => string;\r\n}\r\n\r\nexport function LookupSelect({id, sort, disabled, labelGetter, onChange, options, showEmptyOption, emptyOptionLabel}: LookupSelectProps) {\r\n\tconst lOptions: GenericSelectOption<number>[] = useMemo(\r\n\t\t() => {\r\n\t\t\tlet result: Array<LookupTableEntity> = []\r\n\t\t\tif (options) {\r\n\t\t\t\tresult = sort ? options.sort((a, b) => a.name > b.name ? 1 : -1) : options;\r\n\t\t\t}\r\n\t\t\treturn result\r\n\t\t\t\t.map(\r\n\t\t\t\t\t(o) => {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tid: o.id,\r\n\t\t\t\t\t\t\tlabel: labelGetter ? labelGetter(o) : o.name\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t},\r\n\t\t[options]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<NumberSelect\r\n\t\t\tdisabled={disabled}\r\n\t\t\tvalue={id}\r\n\t\t\toptions={lOptions}\r\n\t\t\tonChange={onChange}\r\n\t\t\tshowEmptyOption={showEmptyOption}\r\n\t\t\temptyOptionLabel={emptyOptionLabel}\r\n\t\t/>\r\n\t);\r\n}\r\n","import React from 'react';\r\nimport {Placeholder, ProgressBar} from \"react-bootstrap\";\r\nimport {QueueStats} from 'zavadil-ts-common';\r\nimport {QueueStateControl} from \"./QueueStateControl\";\r\n\r\nexport type QueueStatsControlProps = {\r\n\tname: string;\r\n\tstats?: QueueStats | null;\r\n}\r\n\r\nexport function QueueStatsControl({name, stats}: QueueStatsControlProps) {\r\n\tconst max = stats ? stats.remaining + stats.processed : undefined\r\n\r\n\treturn (\r\n\t\t<div>\r\n\t\t\t<div className=\"d-flex align-items-center gap-2\">\r\n\t\t\t\t<pre>{name}</pre>\r\n\t\t\t\t<pre>[{stats?.processed !== undefined ? stats.processed : '?'} / {max !== undefined ? max : '?'}]</pre>\r\n\t\t\t\t<QueueStateControl state={stats ? stats.state : 'Unknown'}/>\r\n\t\t\t</div>\r\n\t\t\t<div className=\"p-1\">\r\n\t\t\t\t{\r\n\t\t\t\t\tstats ? <ProgressBar variant=\"primary\" striped={true} animated={true} min={0} now={stats.processed} max={max || 1}/>\r\n\t\t\t\t\t\t: <Placeholder className=\"w-100\" animation=\"glow\">\r\n\t\t\t\t\t\t\t<Placeholder className=\"w-100\"/>\r\n\t\t\t\t\t\t</Placeholder>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n}\r\n","import {PropsWithChildren, useMemo} from \"react\";\r\nimport {ActiveButtonProps, LoadingButton} from \"./LoadingButton\";\r\nimport {FaFloppyDisk} from \"react-icons/fa6\";\r\n\r\nexport type SaveButtonProps = ActiveButtonProps & {\r\n\tisChanged?: boolean;\r\n};\r\n\r\nexport function SaveButton({disabled, icon, loading, children, size, onClick, isChanged}: PropsWithChildren<SaveButtonProps>) {\r\n\tconst icn = useMemo(\r\n\t\t() => icon ? icon : <FaFloppyDisk/>,\r\n\t\t[icon]\r\n\t);\r\n\r\n\tconst content = useMemo(\r\n\t\t() => isChanged ? <strong>{children}</strong> : children,\r\n\t\t[isChanged, children]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<LoadingButton\r\n\t\t\tdisabled={disabled || (isChanged === false)}\r\n\t\t\tonClick={onClick}\r\n\t\t\ticon={icn}\r\n\t\t\tloading={loading}\r\n\t\t\tsize={size}\r\n\t\t>\r\n\t\t\t{content}\r\n\t\t</LoadingButton>\r\n\t);\r\n}\r\n","import {PropsWithChildren, useMemo} from \"react\";\r\n\r\nexport type SpreadProps = {\r\n\tcenter?: boolean;\r\n};\r\n\r\nexport function Spread({children, center}: PropsWithChildren<SpreadProps>) {\r\n\tconst css = useMemo(\r\n\t\t() => center === false ? '' : 'd-flex align-items-center justify-content-center',\r\n\t\t[center]\r\n\t);\r\n\r\n\treturn <div\r\n\t\tclassName={`w-100 h-100 position-absolute ${css}`}\r\n\t\tstyle={{left: 0, right: 0, top: 0, bottom: 0}}\r\n\t>\r\n\t\t{children}\r\n\t</div>\r\n}\r\n\r\nexport default Spread;\r\n","import { Form } from \"react-bootstrap\";\nimport { useMemo, ReactNode } from \"react\";\nimport { StringUtil } from \"zavadil-ts-common\";\n\nexport type SwitchProps = {\n id?: string;\n disabled?: boolean;\n checked: boolean;\n onChange: (checked: boolean) => any;\n size?: number;\n label?: string | ReactNode;\n};\n\nexport function Switch({\n id,\n label,\n disabled,\n checked,\n size,\n onChange,\n}: SwitchProps) {\n const actualId = useMemo(() => (id ? id : StringUtil.randomString()), [id]);\n return (\n <Form.Switch\n disabled={disabled}\n id={actualId}\n size={size}\n type=\"switch\"\n checked={checked}\n onChange={(e) => onChange(!checked)}\n className=\"cursor-pointer\"\n label={label}\n />\n );\n}\n","import React, {useMemo} from 'react';\r\nimport {Table} from \"react-bootstrap\";\r\nimport {PlaceholderSize} from \"react-bootstrap/usePlaceholder\";\r\n\r\nconst DEFAULT_COLS = 1;\r\nconst DEFAULT_ROWS = 20;\r\nconst DEFAULT_SIZE: PlaceholderSize = \"lg\";\r\n\r\nexport type TablePlaceholderProps = {\r\n\tcols?: number;\r\n\trows?: number;\r\n\tsize?: PlaceholderSize;\r\n};\r\n\r\nexport function TablePlaceholder({cols, rows, size}: TablePlaceholderProps) {\r\n\tconst colsN: number = useMemo(() => cols === undefined ? DEFAULT_COLS : cols, [cols]);\r\n\tconst rowsN: number = useMemo(() => rows === undefined ? DEFAULT_ROWS : rows, [rows]);\r\n\tconst sizeS: PlaceholderSize = useMemo(() => size === undefined ? DEFAULT_SIZE : size, [size]);\r\n\r\n\treturn (\r\n\t\t<div>\r\n\t\t\t<Table responsive>\r\n\t\t\t\t<tbody>\r\n\t\t\t\t{\r\n\t\t\t\t\tArray.from(\r\n\t\t\t\t\t\t{length: rowsN},\r\n\t\t\t\t\t\t(_, i) => <tr key={i}>\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tArray.from(\r\n\t\t\t\t\t\t\t\t\t{length: colsN},\r\n\t\t\t\t\t\t\t\t\t(_, i) => <td key={i}>\r\n\t\t\t\t\t\t\t\t\t\t<div className=\"w-100 p-1 m-1\"></div>\r\n\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t\t</tbody>\r\n\t\t\t</Table>\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default TablePlaceholder;\r\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\r\nimport {ObjectUtil} from 'zavadil-ts-common';\r\nimport {AdvancedTable, AdvancedTableProps} from \"./AdvancedTable\";\r\nimport {RenderFunc, SelectableTableHeader, TableHeader} from \"./TableTypes\";\r\nimport {BsCheckAll} from \"react-icons/bs\";\r\nimport IconCheck from \"../forms/IconCheck\";\r\n\r\nexport type SelectableItem<T> = {\r\n\tselected: boolean;\r\n\titem: T;\r\n};\r\n\r\nexport type TableWithSelectProps<T> = Omit<AdvancedTableProps, 'header'> & {\r\n\tshowSelect?: boolean;\r\n\theader: SelectableTableHeader<T>;\r\n\titems?: Array<T>;\r\n\tonSelect?: (selected: Array<T>) => any;\r\n\tonClick?: (selected: T) => any;\r\n};\r\n\r\nfunction createRenderer<T>(name: string): RenderFunc<T> {\r\n\treturn (e: T) => ObjectUtil.getNestedValue(e, name);\r\n}\r\n\r\nexport function TableWithSelect<T>({\r\n\tshowSelect,\r\n\theader,\r\n\titems,\r\n\tonSelect,\r\n\tonClick,\r\n\ttotalItems,\r\n\tpaging,\r\n\tonPagingChanged\r\n}: TableWithSelectProps<T>) {\r\n\tconst [selectAll, setSelectAll] = useState<boolean>(false);\r\n\tconst [selectableItems, setSelectableItems] = useState<Array<SelectableItem<T>>>();\r\n\r\n\tconst updateSelectAll = useCallback(\r\n\t\t(sa: boolean) => {\r\n\t\t\tif (selectableItems) {\r\n\t\t\t\tsetSelectableItems(selectableItems.map(\r\n\t\t\t\t\t(i) => {\r\n\t\t\t\t\t\treturn {selected: sa, item: i.item};\r\n\t\t\t\t\t}\r\n\t\t\t\t));\r\n\t\t\t}\r\n\t\t\tsetSelectAll(sa);\r\n\t\t},\r\n\t\t[selectableItems]\r\n\t);\r\n\r\n\tconst selectableHeader = useMemo(\r\n\t\t() => {\r\n\t\t\tconst h: TableHeader = [...header];\r\n\t\t\tif (showSelect !== false) {\r\n\t\t\t\th.unshift(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tname: '',\r\n\t\t\t\t\t\tlabel: <div className=\"py-1\">\r\n\t\t\t\t\t\t\t<IconCheck\r\n\t\t\t\t\t\t\t\tchecked={selectAll}\r\n\t\t\t\t\t\t\t\tonChange={\r\n\t\t\t\t\t\t\t\t\t() => updateSelectAll(!selectAll)\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\ticonOn={<BsCheckAll/>}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\treturn h;\r\n\t\t},\r\n\t\t[header, selectAll, updateSelectAll]\r\n\t);\r\n\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\tsetSelectableItems(items ? items.map(\r\n\t\t\t\t(i) => {\r\n\t\t\t\t\treturn {selected: selectAll, item: i};\r\n\t\t\t\t}\r\n\t\t\t) : undefined);\r\n\t\t},\r\n\t\t[items]\r\n\t);\r\n\r\n\tuseEffect(\r\n\t\t() => {\r\n\t\t\tif (!selectableItems) return;\r\n\t\t\tif (!onSelect) return;\r\n\t\t\tonSelect(selectableItems.filter((i) => i.selected).map((i) => i.item));\r\n\t\t},\r\n\t\t[selectableItems, onSelect]\r\n\t);\r\n\r\n\treturn <AdvancedTable\r\n\t\theader={selectableHeader}\r\n\t\thover={onClick !== undefined}\r\n\t\tpaging={paging}\r\n\t\tstriped={true}\r\n\t\ttotalItems={totalItems}\r\n\t\tonPagingChanged={onPagingChanged}\r\n\t>\r\n\t\t{\r\n\t\t\tselectableItems && selectableItems.map(\r\n\t\t\t\t(item, index) => <tr\r\n\t\t\t\t\tkey={index}\r\n\t\t\t\t\tclassName={`selectable ${onClick ? 'cursor-pointer' : ''} ${item.selected ? 'table-active table-primary' : ''}`}\r\n\t\t\t\t\tonClick={\r\n\t\t\t\t\t\t(e) => {\r\n\t\t\t\t\t\t\tif (onClick) onClick(item.item);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t(showSelect !== false) && <td>\r\n\t\t\t\t\t\t\t<div className=\"py-2 d-flex align-items-center\">\r\n\t\t\t\t\t\t\t\t<IconCheck\r\n\t\t\t\t\t\t\t\t\tchecked={item.selected}\r\n\t\t\t\t\t\t\t\t\tonChange={\r\n\t\t\t\t\t\t\t\t\t\t() => {\r\n\t\t\t\t\t\t\t\t\t\t\titem.selected = !item.selected;\r\n\t\t\t\t\t\t\t\t\t\t\tif (selectAll && !item.selected) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tsetSelectAll(false);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tsetSelectableItems([...selectableItems]);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\theader.map(\r\n\t\t\t\t\t\t\t(h, index) => {\r\n\t\t\t\t\t\t\t\tconst renderer = h.renderer || createRenderer(h.name);\r\n\t\t\t\t\t\t\t\treturn <td key={index}>{renderer(item.item)}</td>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t}\r\n\t\t\t\t</tr>\r\n\t\t\t)\r\n\t\t}\r\n\t</AdvancedTable>\r\n}\r\n\r\nexport default TableWithSelect;\r\n","import {UserAlert, UserAlerts, UserAlertType} from 'zavadil-ts-common';\r\nimport {useCallback, useEffect, useState} from \"react\";\r\nimport UserAlertWidget from \"./UserAlertWidget\";\r\nimport UserAlertTypeIcon from \"./UserAlertTypeIcon\";\r\nimport {Stack} from \"react-bootstrap\";\r\nimport {IconButton} from \"../forms\";\r\nimport {BsEye, BsTrash} from \"react-icons/bs\";\r\nimport {VscEyeClosed} from \"react-icons/vsc\";\r\n\r\nexport type UserAlertsWidgetProps = {\r\n\tuserAlerts: UserAlerts;\r\n};\r\n\r\nexport function UserAlertsWidget({userAlerts}: UserAlertsWidgetProps) {\r\n\tconst [showAll, setShowAll] = useState<boolean>(false);\r\n\tconst [totalAlerts, setTotalAlerts] = useState<number>(userAlerts.alerts.length);\r\n\tconst [renderedAlerts, setRenderedAlerts] = useState<UserAlert[]>([...userAlerts.visibleAlerts]);\r\n\tconst [summary, setSummary] = useState<Map<UserAlertType, number>>(userAlerts.getSummary());\r\n\r\n\tconst onChangeHandler = useCallback(\r\n\t\t() => {\r\n\t\t\tsetTotalAlerts(userAlerts.alerts.length);\r\n\t\t\tsetRenderedAlerts(showAll ? [...userAlerts.alerts] : [...userAlerts.visibleAlerts]);\r\n\t\t\tsetSummary(userAlerts.getSummary());\r\n\t\t},\r\n\t\t[userAlerts, showAll]\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\t\tuserAlerts.addOnChangeHandler(onChangeHandler);\r\n\t\t\tconst handle = setInterval(\r\n\t\t\t\t() => userAlerts.updateVisibility(),\r\n\t\t\t\t100\r\n\t\t\t);\r\n\t\t\treturn () => {\r\n\t\t\t\tclearInterval(handle);\r\n\t\t\t\tuserAlerts.removeOnChangeHandler(onChangeHandler);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[userAlerts, onChangeHandler]\r\n\t);\r\n\r\n\tif (totalAlerts <= 0) return <></>;\r\n\r\n\treturn (\r\n\t\t<div className=\"user-alerts border rounded bg-body text-body position-fixed text-end\" style={{bottom: 15, right: 15, zIndex: 2147483647}}>\r\n\t\t\t{\r\n\t\t\t\trenderedAlerts.length > 0 &&\r\n\t\t\t\t<div className=\"max-w-50 p-2 border-bottom\">\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\trenderedAlerts.map((a, index) => <UserAlertWidget key={index} userAlert={a} maxDurationMs={userAlerts.maxVisibilityMs}/>)\r\n\t\t\t\t\t}\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t\t<div className=\"p-2\">\r\n\t\t\t\t<Stack direction=\"horizontal\" gap={2} className=\"justify-content-end align-items-center\">\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tshowAll ? <IconButton size=\"sm\" variant=\"primary\" onClick={() => setShowAll(false)} icon={<VscEyeClosed/>}>Hide</IconButton>\r\n\t\t\t\t\t\t\t: <IconButton size=\"sm\" variant=\"primary\" onClick={() => setShowAll(true)} icon={<BsEye/>}>Show All</IconButton>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tArray.from(summary.entries()).map(\r\n\t\t\t\t\t\t\t(entry, index) => (\r\n\t\t\t\t\t\t\t\t<Stack key={index} direction=\"horizontal\" gap={1} className=\"px-1 border rounded align-items-center\">\r\n\t\t\t\t\t\t\t\t\t<UserAlertTypeIcon type={entry[0]} customVariant={entry[1] === 0 ? 'muted' : undefined}/>\r\n\t\t\t\t\t\t\t\t\t<div className={entry[1] > 0 ? `text-${entry[0]} fw-bold` : 'text-muted'}>\r\n\t\t\t\t\t\t\t\t\t\t{entry[1]}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</Stack>\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t}\r\n\t\t\t\t\t<IconButton size=\"sm\" variant=\"danger\" onClick={() => userAlerts.reset()} icon={<BsTrash/>}>Reset</IconButton>\r\n\t\t\t\t</Stack>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport default UserAlertsWidget;\r\n"],"names":["LocalizationContext","createContext","BasicLocalization","Localize","text","tag","localization","useContext","p","useMemo","undefined","tags","t","translate","_jsx","jsx","_Fragment","Fragment","children","TextInputWithReset","value","onChange","onReset","onBlur","disabled","className","actual","StringUtil","getNonEmpty","isEmpty","isBlank","reset","useCallback","_jsxs","jsxs","InputGroup","Form","Control","type","e","target","Button","onClick","BsXCircle","IconButton","variant","icon","size","LoadingButton","loading","Spinner","StringSelect","options","showEmptyOption","emptyOptionLabel","useEffect","length","id","Select","map","o","i","label","NumberSelect","nValue","String","nOptions","nChange","s","NumberUtil","parseNumber","AutocompleteSelect","selected","labelGetter","onSearch","searchPromise","setSearchPromise","useState","searchText","setSearchText","itemSelection","setItemSelection","blurTimeout","useRef","finalLabelGetter","item","name","finalCss","userLeftControl","console","log","startBlur","current","window","setTimeout","cancelBlur","clearTimeout","cancel","userChangedText","cancellable","CancellablePromise","promise","then","userSelectedItem","onFocus","Dropdown","defaultShow","show","Menu","Item","active","AutocompleteEntitySelect","entityClient","search","loadPage","safeLowercase","page","sorting","content","AutocompleteLookupSelect","lookupClient","EntityIdSelect","sort","lOptions","result","a","b","EntitySelect","find","TablePagination","paging","totalItems","onPagingChanged","totalPages","Math","ceil","pageChanged","ObjectUtil","clone","paginationItems","push","Pagination","First","Prev","maxPagesSide","round","start","end","Ellipsis","number","Next","Last","DEFAULT_SIZES","AdvancedTable","hover","showPagingOnBottom","showPageSizeSelection","striped","bordered","header","sizes","si","ss","Table","responsive","colSpan","h","index","sortBy","field","role","fieldName","f","isSoleField","ctrlKey","desc","sortingChanged","BsFillCaretDownFill","BsFillCaretUpFill","IconCheck","checked","iconOn","iconOff","renderedIcon","BsCheckCircle","BsCircle","stopPropagation","preventDefault","Duration","ms","DateUtil","formatDuration","ICONS","Map","UserAlertType","error","BsBug","warning","BsExclamationDiamond","info","BsInfo","UserAlertTypeIcon","customVariant","iconFunc","get","BsQuestion","UserAlertWidget","userAlert","maxDurationMs","Stack","direction","gap","remainsMs","style","width","ProgressBar","min","max","now","formatDateForHumans","time","message","ConfirmDialogContextData","constructor","setProps","this","confirm","onConfirmed","onConfirm","onClose","ConfirmDialogContext","STATE_COLORS","QueueStateControl","state","color","Badge","setSelected","EntityClientWithStub","loadSingleStub","loadSingle","selectionChanged","nId","stats","cachedItems","capacity","Modal","backdrop","onHide","Header","Body","Footer","formatDateForInput","parseDate","formatDateTimeForHumans","formatDateTimeForInput","isChanged","icn","BsTrash","date","Date","getTime","Group","Label","Switch","readOnly","heapSize","heapMaxSize","free","heapFreeSize","used","ByteUtil","formatByteSize","remaining","processed","animated","Placeholder","animation","FaFloppyDisk","center","css","left","right","top","bottom","actualId","randomString","cols","rows","colsN","rowsN","Array","from","_","showSelect","items","onSelect","selectAll","setSelectAll","selectableItems","setSelectableItems","updateSelectAll","sa","selectableHeader","unshift","BsCheckAll","filter","renderer","getNestedValue","userAlerts","showAll","setShowAll","totalAlerts","setTotalAlerts","alerts","renderedAlerts","setRenderedAlerts","visibleAlerts","summary","setSummary","getSummary","onChangeHandler","addOnChangeHandler","handle","setInterval","updateVisibility","clearInterval","removeOnChangeHandler","zIndex","maxVisibilityMs","VscEyeClosed","BsEye","entries","entry"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zavadil-react-common",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.13",
|
|
4
4
|
"description": "Common types for React Typescript UI apps.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.esm.js",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"react-bootstrap": "^2.10.9",
|
|
33
33
|
"react-dom": "^18.3.1",
|
|
34
34
|
"react-icons": "^4.10.1",
|
|
35
|
-
"zavadil-ts-common": "2.1.
|
|
35
|
+
"zavadil-ts-common": "2.1.9"
|
|
36
36
|
},
|
|
37
37
|
"eslintConfig": {
|
|
38
38
|
"extends": [
|