@cratis/showrunner.usher.react 0.0.0-bootstrap.0
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/Buttons/MyIssuesButton.tsx +78 -0
- package/Buttons/ReportButton.tsx +51 -0
- package/Buttons/buttonModels.ts +55 -0
- package/Buttons/index.ts +6 -0
- package/Correlation/CorrelationTracker.ts +51 -0
- package/Correlation/index.ts +5 -0
- package/Correlation/withCorrelationIdHeader.ts +44 -0
- package/Icons.tsx +29 -0
- package/Issues/IssueView/AccessPanel.tsx +85 -0
- package/Issues/IssueView/GrantAccessDialog.tsx +56 -0
- package/Issues/IssueView/IdentityPanel.tsx +38 -0
- package/Issues/IssueView/IssueActions.tsx +52 -0
- package/Issues/IssueView/IssueConversationPanel.tsx +89 -0
- package/Issues/IssueView/IssueHeader.tsx +69 -0
- package/Issues/IssueView/IssueView.tsx +74 -0
- package/Issues/IssueView/QuestionBanner.tsx +27 -0
- package/Issues/IssueView/ReopenIssueDialog.tsx +37 -0
- package/Issues/IssueView/ShareIdentityDialog.tsx +37 -0
- package/Issues/IssueView/StatusStrip.tsx +42 -0
- package/Issues/IssueView/SupportSessions.tsx +59 -0
- package/Issues/IssueView/index.ts +15 -0
- package/Issues/MyIssues/IssueList.tsx +78 -0
- package/Issues/MyIssues/MyIssuesDialog.tsx +64 -0
- package/Issues/MyIssues/MyIssuesNavigation.ts +61 -0
- package/Issues/MyIssues/index.ts +6 -0
- package/Issues/MyIssuesList.ts +33 -0
- package/Issues/accessStatus.ts +68 -0
- package/Issues/conversationMessages.ts +136 -0
- package/Issues/index.ts +12 -0
- package/Issues/issueStates.ts +69 -0
- package/Issues/sessionActivity.ts +43 -0
- package/Issues/useAccessStatus.ts +24 -0
- package/Issues/webAddress.ts +22 -0
- package/Labels/UsherLabels.ts +365 -0
- package/Labels/defaultUsherLabels.ts +178 -0
- package/Labels/format.ts +13 -0
- package/Labels/index.ts +7 -0
- package/Labels/resolveLabels.ts +36 -0
- package/Provider/UsherBoundary.tsx +30 -0
- package/Provider/UsherContext.ts +109 -0
- package/Provider/UsherProvider.tsx +134 -0
- package/Provider/index.ts +7 -0
- package/Provider/useUsher.ts +72 -0
- package/README.md +72 -0
- package/Reporting/AccessChoice.ts +107 -0
- package/Reporting/AccessFields.tsx +74 -0
- package/Reporting/AccessNotice.tsx +33 -0
- package/Reporting/ReportErrorDialog.tsx +94 -0
- package/Reporting/ReportIssueDialog.tsx +80 -0
- package/Reporting/ReportLimits.ts +24 -0
- package/Reporting/ReportSent.ts +12 -0
- package/Reporting/SentWithReport.tsx +37 -0
- package/Reporting/TechnicalDetails.tsx +60 -0
- package/Reporting/durationOptions.ts +31 -0
- package/Reporting/formatLocation.ts +27 -0
- package/Reporting/index.ts +16 -0
- package/Reporting/reportValues.ts +150 -0
- package/Reporting/useAccessChoice.ts +53 -0
- package/dist/cjs/Buttons/MyIssuesButton.d.ts +14 -0
- package/dist/cjs/Buttons/MyIssuesButton.d.ts.map +1 -0
- package/dist/cjs/Buttons/MyIssuesButton.js +76 -0
- package/dist/cjs/Buttons/MyIssuesButton.js.map +1 -0
- package/dist/cjs/Buttons/ReportButton.d.ts +8 -0
- package/dist/cjs/Buttons/ReportButton.d.ts.map +1 -0
- package/dist/cjs/Buttons/ReportButton.js +34 -0
- package/dist/cjs/Buttons/ReportButton.js.map +1 -0
- package/dist/cjs/Buttons/buttonModels.d.ts +10 -0
- package/dist/cjs/Buttons/buttonModels.d.ts.map +1 -0
- package/dist/cjs/Buttons/buttonModels.js +44 -0
- package/dist/cjs/Buttons/buttonModels.js.map +1 -0
- package/dist/cjs/Buttons/index.d.ts +4 -0
- package/dist/cjs/Buttons/index.d.ts.map +1 -0
- package/dist/cjs/Correlation/CorrelationTracker.d.ts +10 -0
- package/dist/cjs/Correlation/CorrelationTracker.d.ts.map +1 -0
- package/dist/cjs/Correlation/CorrelationTracker.js +50 -0
- package/dist/cjs/Correlation/CorrelationTracker.js.map +1 -0
- package/dist/cjs/Correlation/index.d.ts +3 -0
- package/dist/cjs/Correlation/index.d.ts.map +1 -0
- package/dist/cjs/Correlation/withCorrelationIdHeader.d.ts +6 -0
- package/dist/cjs/Correlation/withCorrelationIdHeader.d.ts.map +1 -0
- package/dist/cjs/Correlation/withCorrelationIdHeader.js +39 -0
- package/dist/cjs/Correlation/withCorrelationIdHeader.js.map +1 -0
- package/dist/cjs/Icons.d.ts +4 -0
- package/dist/cjs/Icons.d.ts.map +1 -0
- package/dist/cjs/Icons.js +53 -0
- package/dist/cjs/Icons.js.map +1 -0
- package/dist/cjs/Issues/IssueView/AccessPanel.d.ts +6 -0
- package/dist/cjs/Issues/IssueView/AccessPanel.d.ts.map +1 -0
- package/dist/cjs/Issues/IssueView/AccessPanel.js +124 -0
- package/dist/cjs/Issues/IssueView/AccessPanel.js.map +1 -0
- package/dist/cjs/Issues/IssueView/GrantAccessDialog.d.ts +6 -0
- package/dist/cjs/Issues/IssueView/GrantAccessDialog.d.ts.map +1 -0
- package/dist/cjs/Issues/IssueView/GrantAccessDialog.js +56 -0
- package/dist/cjs/Issues/IssueView/GrantAccessDialog.js.map +1 -0
- package/dist/cjs/Issues/IssueView/IdentityPanel.d.ts +6 -0
- package/dist/cjs/Issues/IssueView/IdentityPanel.d.ts.map +1 -0
- package/dist/cjs/Issues/IssueView/IdentityPanel.js +45 -0
- package/dist/cjs/Issues/IssueView/IdentityPanel.js.map +1 -0
- package/dist/cjs/Issues/IssueView/IssueActions.d.ts +6 -0
- package/dist/cjs/Issues/IssueView/IssueActions.d.ts.map +1 -0
- package/dist/cjs/Issues/IssueView/IssueActions.js +58 -0
- package/dist/cjs/Issues/IssueView/IssueActions.js.map +1 -0
- package/dist/cjs/Issues/IssueView/IssueConversationPanel.d.ts +6 -0
- package/dist/cjs/Issues/IssueView/IssueConversationPanel.d.ts.map +1 -0
- package/dist/cjs/Issues/IssueView/IssueConversationPanel.js +97 -0
- package/dist/cjs/Issues/IssueView/IssueConversationPanel.js.map +1 -0
- package/dist/cjs/Issues/IssueView/IssueHeader.d.ts +7 -0
- package/dist/cjs/Issues/IssueView/IssueHeader.d.ts.map +1 -0
- package/dist/cjs/Issues/IssueView/IssueHeader.js +94 -0
- package/dist/cjs/Issues/IssueView/IssueHeader.js.map +1 -0
- package/dist/cjs/Issues/IssueView/IssueView.d.ts +7 -0
- package/dist/cjs/Issues/IssueView/IssueView.d.ts.map +1 -0
- package/dist/cjs/Issues/IssueView/IssueView.js +85 -0
- package/dist/cjs/Issues/IssueView/IssueView.js.map +1 -0
- package/dist/cjs/Issues/IssueView/QuestionBanner.d.ts +5 -0
- package/dist/cjs/Issues/IssueView/QuestionBanner.d.ts.map +1 -0
- package/dist/cjs/Issues/IssueView/QuestionBanner.js +24 -0
- package/dist/cjs/Issues/IssueView/QuestionBanner.js.map +1 -0
- package/dist/cjs/Issues/IssueView/ReopenIssueDialog.d.ts +6 -0
- package/dist/cjs/Issues/IssueView/ReopenIssueDialog.d.ts.map +1 -0
- package/dist/cjs/Issues/IssueView/ReopenIssueDialog.js +34 -0
- package/dist/cjs/Issues/IssueView/ReopenIssueDialog.js.map +1 -0
- package/dist/cjs/Issues/IssueView/ShareIdentityDialog.d.ts +6 -0
- package/dist/cjs/Issues/IssueView/ShareIdentityDialog.d.ts.map +1 -0
- package/dist/cjs/Issues/IssueView/ShareIdentityDialog.js +32 -0
- package/dist/cjs/Issues/IssueView/ShareIdentityDialog.js.map +1 -0
- package/dist/cjs/Issues/IssueView/StatusStrip.d.ts +6 -0
- package/dist/cjs/Issues/IssueView/StatusStrip.d.ts.map +1 -0
- package/dist/cjs/Issues/IssueView/StatusStrip.js +31 -0
- package/dist/cjs/Issues/IssueView/StatusStrip.js.map +1 -0
- package/dist/cjs/Issues/IssueView/SupportSessions.d.ts +7 -0
- package/dist/cjs/Issues/IssueView/SupportSessions.d.ts.map +1 -0
- package/dist/cjs/Issues/IssueView/SupportSessions.js +62 -0
- package/dist/cjs/Issues/IssueView/SupportSessions.js.map +1 -0
- package/dist/cjs/Issues/IssueView/index.d.ts +13 -0
- package/dist/cjs/Issues/IssueView/index.d.ts.map +1 -0
- package/dist/cjs/Issues/MyIssues/IssueList.d.ts +7 -0
- package/dist/cjs/Issues/MyIssues/IssueList.d.ts.map +1 -0
- package/dist/cjs/Issues/MyIssues/IssueList.js +92 -0
- package/dist/cjs/Issues/MyIssues/IssueList.js.map +1 -0
- package/dist/cjs/Issues/MyIssues/MyIssuesDialog.d.ts +7 -0
- package/dist/cjs/Issues/MyIssues/MyIssuesDialog.d.ts.map +1 -0
- package/dist/cjs/Issues/MyIssues/MyIssuesDialog.js +79 -0
- package/dist/cjs/Issues/MyIssues/MyIssuesDialog.js.map +1 -0
- package/dist/cjs/Issues/MyIssues/MyIssuesNavigation.d.ts +21 -0
- package/dist/cjs/Issues/MyIssues/MyIssuesNavigation.d.ts.map +1 -0
- package/dist/cjs/Issues/MyIssues/MyIssuesNavigation.js +52 -0
- package/dist/cjs/Issues/MyIssues/MyIssuesNavigation.js.map +1 -0
- package/dist/cjs/Issues/MyIssues/index.d.ts +4 -0
- package/dist/cjs/Issues/MyIssues/index.d.ts.map +1 -0
- package/dist/cjs/Issues/MyIssuesList.d.ts +7 -0
- package/dist/cjs/Issues/MyIssuesList.d.ts.map +1 -0
- package/dist/cjs/Issues/MyIssuesList.js +33 -0
- package/dist/cjs/Issues/MyIssuesList.js.map +1 -0
- package/dist/cjs/Issues/accessStatus.d.ts +13 -0
- package/dist/cjs/Issues/accessStatus.d.ts.map +1 -0
- package/dist/cjs/Issues/accessStatus.js +60 -0
- package/dist/cjs/Issues/accessStatus.js.map +1 -0
- package/dist/cjs/Issues/conversationMessages.d.ts +14 -0
- package/dist/cjs/Issues/conversationMessages.d.ts.map +1 -0
- package/dist/cjs/Issues/conversationMessages.js +131 -0
- package/dist/cjs/Issues/conversationMessages.js.map +1 -0
- package/dist/cjs/Issues/index.d.ts +10 -0
- package/dist/cjs/Issues/index.d.ts.map +1 -0
- package/dist/cjs/Issues/issueStates.d.ts +12 -0
- package/dist/cjs/Issues/issueStates.d.ts.map +1 -0
- package/dist/cjs/Issues/issueStates.js +86 -0
- package/dist/cjs/Issues/issueStates.js.map +1 -0
- package/dist/cjs/Issues/sessionActivity.d.ts +8 -0
- package/dist/cjs/Issues/sessionActivity.d.ts.map +1 -0
- package/dist/cjs/Issues/sessionActivity.js +39 -0
- package/dist/cjs/Issues/sessionActivity.js.map +1 -0
- package/dist/cjs/Issues/useAccessStatus.d.ts +4 -0
- package/dist/cjs/Issues/useAccessStatus.d.ts.map +1 -0
- package/dist/cjs/Issues/useAccessStatus.js +30 -0
- package/dist/cjs/Issues/useAccessStatus.js.map +1 -0
- package/dist/cjs/Issues/webAddress.d.ts +2 -0
- package/dist/cjs/Issues/webAddress.d.ts.map +1 -0
- package/dist/cjs/Issues/webAddress.js +24 -0
- package/dist/cjs/Issues/webAddress.js.map +1 -0
- package/dist/cjs/Labels/UsherLabels.d.ts +177 -0
- package/dist/cjs/Labels/UsherLabels.d.ts.map +1 -0
- package/dist/cjs/Labels/defaultUsherLabels.d.ts +3 -0
- package/dist/cjs/Labels/defaultUsherLabels.d.ts.map +1 -0
- package/dist/cjs/Labels/defaultUsherLabels.js +179 -0
- package/dist/cjs/Labels/defaultUsherLabels.js.map +1 -0
- package/dist/cjs/Labels/format.d.ts +2 -0
- package/dist/cjs/Labels/format.d.ts.map +1 -0
- package/dist/cjs/Labels/format.js +15 -0
- package/dist/cjs/Labels/format.js.map +1 -0
- package/dist/cjs/Labels/index.d.ts +5 -0
- package/dist/cjs/Labels/index.d.ts.map +1 -0
- package/dist/cjs/Labels/resolveLabels.d.ts +3 -0
- package/dist/cjs/Labels/resolveLabels.d.ts.map +1 -0
- package/dist/cjs/Labels/resolveLabels.js +35 -0
- package/dist/cjs/Labels/resolveLabels.js.map +1 -0
- package/dist/cjs/Provider/UsherBoundary.d.ts +6 -0
- package/dist/cjs/Provider/UsherBoundary.d.ts.map +1 -0
- package/dist/cjs/Provider/UsherBoundary.js +24 -0
- package/dist/cjs/Provider/UsherBoundary.js.map +1 -0
- package/dist/cjs/Provider/UsherContext.d.ts +24 -0
- package/dist/cjs/Provider/UsherContext.d.ts.map +1 -0
- package/dist/cjs/Provider/UsherContext.js +41 -0
- package/dist/cjs/Provider/UsherContext.js.map +1 -0
- package/dist/cjs/Provider/UsherProvider.d.ts +14 -0
- package/dist/cjs/Provider/UsherProvider.d.ts.map +1 -0
- package/dist/cjs/Provider/UsherProvider.js +122 -0
- package/dist/cjs/Provider/UsherProvider.js.map +1 -0
- package/dist/cjs/Provider/index.d.ts +5 -0
- package/dist/cjs/Provider/index.d.ts.map +1 -0
- package/dist/cjs/Provider/useUsher.d.ts +13 -0
- package/dist/cjs/Provider/useUsher.d.ts.map +1 -0
- package/dist/cjs/Provider/useUsher.js +31 -0
- package/dist/cjs/Provider/useUsher.js.map +1 -0
- package/dist/cjs/Reporting/AccessChoice.d.ts +13 -0
- package/dist/cjs/Reporting/AccessChoice.d.ts.map +1 -0
- package/dist/cjs/Reporting/AccessChoice.js +113 -0
- package/dist/cjs/Reporting/AccessChoice.js.map +1 -0
- package/dist/cjs/Reporting/AccessFields.d.ts +12 -0
- package/dist/cjs/Reporting/AccessFields.d.ts.map +1 -0
- package/dist/cjs/Reporting/AccessFields.js +79 -0
- package/dist/cjs/Reporting/AccessFields.js.map +1 -0
- package/dist/cjs/Reporting/AccessNotice.d.ts +7 -0
- package/dist/cjs/Reporting/AccessNotice.d.ts.map +1 -0
- package/dist/cjs/Reporting/AccessNotice.js +28 -0
- package/dist/cjs/Reporting/AccessNotice.js.map +1 -0
- package/dist/cjs/Reporting/ReportErrorDialog.d.ts +9 -0
- package/dist/cjs/Reporting/ReportErrorDialog.d.ts.map +1 -0
- package/dist/cjs/Reporting/ReportErrorDialog.js +87 -0
- package/dist/cjs/Reporting/ReportErrorDialog.js.map +1 -0
- package/dist/cjs/Reporting/ReportIssueDialog.d.ts +8 -0
- package/dist/cjs/Reporting/ReportIssueDialog.d.ts.map +1 -0
- package/dist/cjs/Reporting/ReportIssueDialog.js +81 -0
- package/dist/cjs/Reporting/ReportIssueDialog.js.map +1 -0
- package/dist/cjs/Reporting/ReportLimits.d.ts +8 -0
- package/dist/cjs/Reporting/ReportLimits.d.ts.map +1 -0
- package/dist/cjs/Reporting/ReportLimits.js +19 -0
- package/dist/cjs/Reporting/ReportLimits.js.map +1 -0
- package/dist/cjs/Reporting/ReportSent.d.ts +5 -0
- package/dist/cjs/Reporting/ReportSent.d.ts.map +1 -0
- package/dist/cjs/Reporting/SentWithReport.d.ts +7 -0
- package/dist/cjs/Reporting/SentWithReport.d.ts.map +1 -0
- package/dist/cjs/Reporting/SentWithReport.js +40 -0
- package/dist/cjs/Reporting/SentWithReport.js.map +1 -0
- package/dist/cjs/Reporting/TechnicalDetails.d.ts +9 -0
- package/dist/cjs/Reporting/TechnicalDetails.d.ts.map +1 -0
- package/dist/cjs/Reporting/TechnicalDetails.js +75 -0
- package/dist/cjs/Reporting/TechnicalDetails.js.map +1 -0
- package/dist/cjs/Reporting/durationOptions.d.ts +9 -0
- package/dist/cjs/Reporting/durationOptions.d.ts.map +1 -0
- package/dist/cjs/Reporting/durationOptions.js +29 -0
- package/dist/cjs/Reporting/durationOptions.js.map +1 -0
- package/dist/cjs/Reporting/formatLocation.d.ts +7 -0
- package/dist/cjs/Reporting/formatLocation.d.ts.map +1 -0
- package/dist/cjs/Reporting/formatLocation.js +23 -0
- package/dist/cjs/Reporting/formatLocation.js.map +1 -0
- package/dist/cjs/Reporting/index.d.ts +14 -0
- package/dist/cjs/Reporting/index.d.ts.map +1 -0
- package/dist/cjs/Reporting/reportValues.d.ts +22 -0
- package/dist/cjs/Reporting/reportValues.d.ts.map +1 -0
- package/dist/cjs/Reporting/reportValues.js +124 -0
- package/dist/cjs/Reporting/reportValues.js.map +1 -0
- package/dist/cjs/Reporting/useAccessChoice.d.ts +13 -0
- package/dist/cjs/Reporting/useAccessChoice.d.ts.map +1 -0
- package/dist/cjs/Reporting/useAccessChoice.js +41 -0
- package/dist/cjs/Reporting/useAccessChoice.js.map +1 -0
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +133 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/esm/Buttons/MyIssuesButton.d.ts +14 -0
- package/dist/esm/Buttons/MyIssuesButton.d.ts.map +1 -0
- package/dist/esm/Buttons/MyIssuesButton.js +73 -0
- package/dist/esm/Buttons/MyIssuesButton.js.map +1 -0
- package/dist/esm/Buttons/ReportButton.d.ts +8 -0
- package/dist/esm/Buttons/ReportButton.d.ts.map +1 -0
- package/dist/esm/Buttons/ReportButton.js +32 -0
- package/dist/esm/Buttons/ReportButton.js.map +1 -0
- package/dist/esm/Buttons/buttonModels.d.ts +10 -0
- package/dist/esm/Buttons/buttonModels.d.ts.map +1 -0
- package/dist/esm/Buttons/buttonModels.js +41 -0
- package/dist/esm/Buttons/buttonModels.js.map +1 -0
- package/dist/esm/Buttons/index.d.ts +4 -0
- package/dist/esm/Buttons/index.d.ts.map +1 -0
- package/dist/esm/Buttons/index.js +4 -0
- package/dist/esm/Buttons/index.js.map +1 -0
- package/dist/esm/Correlation/CorrelationTracker.d.ts +10 -0
- package/dist/esm/Correlation/CorrelationTracker.d.ts.map +1 -0
- package/dist/esm/Correlation/CorrelationTracker.js +48 -0
- package/dist/esm/Correlation/CorrelationTracker.js.map +1 -0
- package/dist/esm/Correlation/index.d.ts +3 -0
- package/dist/esm/Correlation/index.d.ts.map +1 -0
- package/dist/esm/Correlation/index.js +3 -0
- package/dist/esm/Correlation/index.js.map +1 -0
- package/dist/esm/Correlation/withCorrelationIdHeader.d.ts +6 -0
- package/dist/esm/Correlation/withCorrelationIdHeader.d.ts.map +1 -0
- package/dist/esm/Correlation/withCorrelationIdHeader.js +36 -0
- package/dist/esm/Correlation/withCorrelationIdHeader.js.map +1 -0
- package/dist/esm/Icons.d.ts +4 -0
- package/dist/esm/Icons.d.ts.map +1 -0
- package/dist/esm/Icons.js +49 -0
- package/dist/esm/Icons.js.map +1 -0
- package/dist/esm/Issues/IssueView/AccessPanel.d.ts +6 -0
- package/dist/esm/Issues/IssueView/AccessPanel.d.ts.map +1 -0
- package/dist/esm/Issues/IssueView/AccessPanel.js +122 -0
- package/dist/esm/Issues/IssueView/AccessPanel.js.map +1 -0
- package/dist/esm/Issues/IssueView/GrantAccessDialog.d.ts +6 -0
- package/dist/esm/Issues/IssueView/GrantAccessDialog.d.ts.map +1 -0
- package/dist/esm/Issues/IssueView/GrantAccessDialog.js +54 -0
- package/dist/esm/Issues/IssueView/GrantAccessDialog.js.map +1 -0
- package/dist/esm/Issues/IssueView/IdentityPanel.d.ts +6 -0
- package/dist/esm/Issues/IssueView/IdentityPanel.d.ts.map +1 -0
- package/dist/esm/Issues/IssueView/IdentityPanel.js +43 -0
- package/dist/esm/Issues/IssueView/IdentityPanel.js.map +1 -0
- package/dist/esm/Issues/IssueView/IssueActions.d.ts +6 -0
- package/dist/esm/Issues/IssueView/IssueActions.d.ts.map +1 -0
- package/dist/esm/Issues/IssueView/IssueActions.js +56 -0
- package/dist/esm/Issues/IssueView/IssueActions.js.map +1 -0
- package/dist/esm/Issues/IssueView/IssueConversationPanel.d.ts +6 -0
- package/dist/esm/Issues/IssueView/IssueConversationPanel.d.ts.map +1 -0
- package/dist/esm/Issues/IssueView/IssueConversationPanel.js +95 -0
- package/dist/esm/Issues/IssueView/IssueConversationPanel.js.map +1 -0
- package/dist/esm/Issues/IssueView/IssueHeader.d.ts +7 -0
- package/dist/esm/Issues/IssueView/IssueHeader.d.ts.map +1 -0
- package/dist/esm/Issues/IssueView/IssueHeader.js +92 -0
- package/dist/esm/Issues/IssueView/IssueHeader.js.map +1 -0
- package/dist/esm/Issues/IssueView/IssueView.d.ts +7 -0
- package/dist/esm/Issues/IssueView/IssueView.d.ts.map +1 -0
- package/dist/esm/Issues/IssueView/IssueView.js +83 -0
- package/dist/esm/Issues/IssueView/IssueView.js.map +1 -0
- package/dist/esm/Issues/IssueView/QuestionBanner.d.ts +5 -0
- package/dist/esm/Issues/IssueView/QuestionBanner.d.ts.map +1 -0
- package/dist/esm/Issues/IssueView/QuestionBanner.js +22 -0
- package/dist/esm/Issues/IssueView/QuestionBanner.js.map +1 -0
- package/dist/esm/Issues/IssueView/ReopenIssueDialog.d.ts +6 -0
- package/dist/esm/Issues/IssueView/ReopenIssueDialog.d.ts.map +1 -0
- package/dist/esm/Issues/IssueView/ReopenIssueDialog.js +32 -0
- package/dist/esm/Issues/IssueView/ReopenIssueDialog.js.map +1 -0
- package/dist/esm/Issues/IssueView/ShareIdentityDialog.d.ts +6 -0
- package/dist/esm/Issues/IssueView/ShareIdentityDialog.d.ts.map +1 -0
- package/dist/esm/Issues/IssueView/ShareIdentityDialog.js +30 -0
- package/dist/esm/Issues/IssueView/ShareIdentityDialog.js.map +1 -0
- package/dist/esm/Issues/IssueView/StatusStrip.d.ts +6 -0
- package/dist/esm/Issues/IssueView/StatusStrip.d.ts.map +1 -0
- package/dist/esm/Issues/IssueView/StatusStrip.js +29 -0
- package/dist/esm/Issues/IssueView/StatusStrip.js.map +1 -0
- package/dist/esm/Issues/IssueView/SupportSessions.d.ts +7 -0
- package/dist/esm/Issues/IssueView/SupportSessions.d.ts.map +1 -0
- package/dist/esm/Issues/IssueView/SupportSessions.js +60 -0
- package/dist/esm/Issues/IssueView/SupportSessions.js.map +1 -0
- package/dist/esm/Issues/IssueView/index.d.ts +13 -0
- package/dist/esm/Issues/IssueView/index.d.ts.map +1 -0
- package/dist/esm/Issues/IssueView/index.js +13 -0
- package/dist/esm/Issues/IssueView/index.js.map +1 -0
- package/dist/esm/Issues/MyIssues/IssueList.d.ts +7 -0
- package/dist/esm/Issues/MyIssues/IssueList.d.ts.map +1 -0
- package/dist/esm/Issues/MyIssues/IssueList.js +90 -0
- package/dist/esm/Issues/MyIssues/IssueList.js.map +1 -0
- package/dist/esm/Issues/MyIssues/MyIssuesDialog.d.ts +7 -0
- package/dist/esm/Issues/MyIssues/MyIssuesDialog.d.ts.map +1 -0
- package/dist/esm/Issues/MyIssues/MyIssuesDialog.js +77 -0
- package/dist/esm/Issues/MyIssues/MyIssuesDialog.js.map +1 -0
- package/dist/esm/Issues/MyIssues/MyIssuesNavigation.d.ts +21 -0
- package/dist/esm/Issues/MyIssues/MyIssuesNavigation.d.ts.map +1 -0
- package/dist/esm/Issues/MyIssues/MyIssuesNavigation.js +49 -0
- package/dist/esm/Issues/MyIssues/MyIssuesNavigation.js.map +1 -0
- package/dist/esm/Issues/MyIssues/index.d.ts +4 -0
- package/dist/esm/Issues/MyIssues/index.d.ts.map +1 -0
- package/dist/esm/Issues/MyIssues/index.js +4 -0
- package/dist/esm/Issues/MyIssues/index.js.map +1 -0
- package/dist/esm/Issues/MyIssuesList.d.ts +7 -0
- package/dist/esm/Issues/MyIssuesList.d.ts.map +1 -0
- package/dist/esm/Issues/MyIssuesList.js +29 -0
- package/dist/esm/Issues/MyIssuesList.js.map +1 -0
- package/dist/esm/Issues/accessStatus.d.ts +13 -0
- package/dist/esm/Issues/accessStatus.d.ts.map +1 -0
- package/dist/esm/Issues/accessStatus.js +54 -0
- package/dist/esm/Issues/accessStatus.js.map +1 -0
- package/dist/esm/Issues/conversationMessages.d.ts +14 -0
- package/dist/esm/Issues/conversationMessages.d.ts.map +1 -0
- package/dist/esm/Issues/conversationMessages.js +125 -0
- package/dist/esm/Issues/conversationMessages.js.map +1 -0
- package/dist/esm/Issues/index.d.ts +10 -0
- package/dist/esm/Issues/index.d.ts.map +1 -0
- package/dist/esm/Issues/index.js +10 -0
- package/dist/esm/Issues/index.js.map +1 -0
- package/dist/esm/Issues/issueStates.d.ts +12 -0
- package/dist/esm/Issues/issueStates.d.ts.map +1 -0
- package/dist/esm/Issues/issueStates.js +81 -0
- package/dist/esm/Issues/issueStates.js.map +1 -0
- package/dist/esm/Issues/sessionActivity.d.ts +8 -0
- package/dist/esm/Issues/sessionActivity.d.ts.map +1 -0
- package/dist/esm/Issues/sessionActivity.js +37 -0
- package/dist/esm/Issues/sessionActivity.js.map +1 -0
- package/dist/esm/Issues/useAccessStatus.d.ts +4 -0
- package/dist/esm/Issues/useAccessStatus.d.ts.map +1 -0
- package/dist/esm/Issues/useAccessStatus.js +28 -0
- package/dist/esm/Issues/useAccessStatus.js.map +1 -0
- package/dist/esm/Issues/webAddress.d.ts +2 -0
- package/dist/esm/Issues/webAddress.d.ts.map +1 -0
- package/dist/esm/Issues/webAddress.js +22 -0
- package/dist/esm/Issues/webAddress.js.map +1 -0
- package/dist/esm/Labels/UsherLabels.d.ts +177 -0
- package/dist/esm/Labels/UsherLabels.d.ts.map +1 -0
- package/dist/esm/Labels/UsherLabels.js +2 -0
- package/dist/esm/Labels/UsherLabels.js.map +1 -0
- package/dist/esm/Labels/defaultUsherLabels.d.ts +3 -0
- package/dist/esm/Labels/defaultUsherLabels.d.ts.map +1 -0
- package/dist/esm/Labels/defaultUsherLabels.js +177 -0
- package/dist/esm/Labels/defaultUsherLabels.js.map +1 -0
- package/dist/esm/Labels/format.d.ts +2 -0
- package/dist/esm/Labels/format.d.ts.map +1 -0
- package/dist/esm/Labels/format.js +13 -0
- package/dist/esm/Labels/format.js.map +1 -0
- package/dist/esm/Labels/index.d.ts +5 -0
- package/dist/esm/Labels/index.d.ts.map +1 -0
- package/dist/esm/Labels/index.js +5 -0
- package/dist/esm/Labels/index.js.map +1 -0
- package/dist/esm/Labels/resolveLabels.d.ts +3 -0
- package/dist/esm/Labels/resolveLabels.d.ts.map +1 -0
- package/dist/esm/Labels/resolveLabels.js +33 -0
- package/dist/esm/Labels/resolveLabels.js.map +1 -0
- package/dist/esm/Provider/UsherBoundary.d.ts +6 -0
- package/dist/esm/Provider/UsherBoundary.d.ts.map +1 -0
- package/dist/esm/Provider/UsherBoundary.js +22 -0
- package/dist/esm/Provider/UsherBoundary.js.map +1 -0
- package/dist/esm/Provider/UsherContext.d.ts +24 -0
- package/dist/esm/Provider/UsherContext.d.ts.map +1 -0
- package/dist/esm/Provider/UsherContext.js +36 -0
- package/dist/esm/Provider/UsherContext.js.map +1 -0
- package/dist/esm/Provider/UsherProvider.d.ts +14 -0
- package/dist/esm/Provider/UsherProvider.d.ts.map +1 -0
- package/dist/esm/Provider/UsherProvider.js +120 -0
- package/dist/esm/Provider/UsherProvider.js.map +1 -0
- package/dist/esm/Provider/index.d.ts +5 -0
- package/dist/esm/Provider/index.d.ts.map +1 -0
- package/dist/esm/Provider/index.js +5 -0
- package/dist/esm/Provider/index.js.map +1 -0
- package/dist/esm/Provider/useUsher.d.ts +13 -0
- package/dist/esm/Provider/useUsher.d.ts.map +1 -0
- package/dist/esm/Provider/useUsher.js +29 -0
- package/dist/esm/Provider/useUsher.js.map +1 -0
- package/dist/esm/Reporting/AccessChoice.d.ts +13 -0
- package/dist/esm/Reporting/AccessChoice.d.ts.map +1 -0
- package/dist/esm/Reporting/AccessChoice.js +106 -0
- package/dist/esm/Reporting/AccessChoice.js.map +1 -0
- package/dist/esm/Reporting/AccessFields.d.ts +12 -0
- package/dist/esm/Reporting/AccessFields.d.ts.map +1 -0
- package/dist/esm/Reporting/AccessFields.js +77 -0
- package/dist/esm/Reporting/AccessFields.js.map +1 -0
- package/dist/esm/Reporting/AccessNotice.d.ts +7 -0
- package/dist/esm/Reporting/AccessNotice.d.ts.map +1 -0
- package/dist/esm/Reporting/AccessNotice.js +26 -0
- package/dist/esm/Reporting/AccessNotice.js.map +1 -0
- package/dist/esm/Reporting/ReportErrorDialog.d.ts +9 -0
- package/dist/esm/Reporting/ReportErrorDialog.d.ts.map +1 -0
- package/dist/esm/Reporting/ReportErrorDialog.js +85 -0
- package/dist/esm/Reporting/ReportErrorDialog.js.map +1 -0
- package/dist/esm/Reporting/ReportIssueDialog.d.ts +8 -0
- package/dist/esm/Reporting/ReportIssueDialog.d.ts.map +1 -0
- package/dist/esm/Reporting/ReportIssueDialog.js +79 -0
- package/dist/esm/Reporting/ReportIssueDialog.js.map +1 -0
- package/dist/esm/Reporting/ReportLimits.d.ts +8 -0
- package/dist/esm/Reporting/ReportLimits.d.ts.map +1 -0
- package/dist/esm/Reporting/ReportLimits.js +17 -0
- package/dist/esm/Reporting/ReportLimits.js.map +1 -0
- package/dist/esm/Reporting/ReportSent.d.ts +5 -0
- package/dist/esm/Reporting/ReportSent.d.ts.map +1 -0
- package/dist/esm/Reporting/ReportSent.js +2 -0
- package/dist/esm/Reporting/ReportSent.js.map +1 -0
- package/dist/esm/Reporting/SentWithReport.d.ts +7 -0
- package/dist/esm/Reporting/SentWithReport.d.ts.map +1 -0
- package/dist/esm/Reporting/SentWithReport.js +38 -0
- package/dist/esm/Reporting/SentWithReport.js.map +1 -0
- package/dist/esm/Reporting/TechnicalDetails.d.ts +9 -0
- package/dist/esm/Reporting/TechnicalDetails.d.ts.map +1 -0
- package/dist/esm/Reporting/TechnicalDetails.js +73 -0
- package/dist/esm/Reporting/TechnicalDetails.js.map +1 -0
- package/dist/esm/Reporting/durationOptions.d.ts +9 -0
- package/dist/esm/Reporting/durationOptions.d.ts.map +1 -0
- package/dist/esm/Reporting/durationOptions.js +27 -0
- package/dist/esm/Reporting/durationOptions.js.map +1 -0
- package/dist/esm/Reporting/formatLocation.d.ts +7 -0
- package/dist/esm/Reporting/formatLocation.d.ts.map +1 -0
- package/dist/esm/Reporting/formatLocation.js +21 -0
- package/dist/esm/Reporting/formatLocation.js.map +1 -0
- package/dist/esm/Reporting/index.d.ts +14 -0
- package/dist/esm/Reporting/index.d.ts.map +1 -0
- package/dist/esm/Reporting/index.js +14 -0
- package/dist/esm/Reporting/index.js.map +1 -0
- package/dist/esm/Reporting/reportValues.d.ts +22 -0
- package/dist/esm/Reporting/reportValues.d.ts.map +1 -0
- package/dist/esm/Reporting/reportValues.js +116 -0
- package/dist/esm/Reporting/reportValues.js.map +1 -0
- package/dist/esm/Reporting/useAccessChoice.d.ts +13 -0
- package/dist/esm/Reporting/useAccessChoice.d.ts.map +1 -0
- package/dist/esm/Reporting/useAccessChoice.js +39 -0
- package/dist/esm/Reporting/useAccessChoice.js.map +1 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +48 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/index.ts +10 -0
- package/package.json +85 -0
- package/styles.css +320 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { Button } from '@cratis/components/Common';
|
|
5
|
+
import { Tag } from '@cratis/components/Display';
|
|
6
|
+
import { IssueConversation } from '@cratis/showrunner.usher';
|
|
7
|
+
import { format } from '../../Labels/index.js';
|
|
8
|
+
import { useUsherContext } from '../../Provider/UsherContext.js';
|
|
9
|
+
import { formatTime } from '../../Reporting/AccessChoice.js';
|
|
10
|
+
import { formatLocation } from '../../Reporting/formatLocation.js';
|
|
11
|
+
import { BackIcon } from '../../Icons.js';
|
|
12
|
+
import { stateBadgeFor } from '../issueStates.js';
|
|
13
|
+
import { isFixReleased } from '../MyIssuesList.js';
|
|
14
|
+
import { isWebAddress } from '../webAddress.js';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Props for {@link IssueHeader}.
|
|
18
|
+
*/
|
|
19
|
+
export interface IssueHeaderProps {
|
|
20
|
+
/** The issue. */
|
|
21
|
+
issue: IssueConversation;
|
|
22
|
+
|
|
23
|
+
/** Goes back to the list of issues; no back button when not given. */
|
|
24
|
+
onBack?: () => void;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The header of an issue: its title and state, when and where it was reported, and what it is linked to.
|
|
29
|
+
*/
|
|
30
|
+
export const IssueHeader = ({ issue, onBack }: IssueHeaderProps) => {
|
|
31
|
+
const { labels, locale } = useUsherContext();
|
|
32
|
+
const badge = stateBadgeFor(issue.state, labels);
|
|
33
|
+
const reportedAt = issue.reportedAt instanceof Date ? issue.reportedAt : new Date(issue.reportedAt);
|
|
34
|
+
const location = formatLocation(issue.location, labels.common.locationSeparator, labels.common.unknownLocation);
|
|
35
|
+
const workItem = issue.workItem;
|
|
36
|
+
const hasWorkItem = (workItem?.reference ?? '').length > 0;
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<header className='usher-issue-header'>
|
|
40
|
+
{onBack && (
|
|
41
|
+
<Button variant='ghost' size='small' icon={<BackIcon />} onClick={onBack} label={labels.issue.back} />
|
|
42
|
+
)}
|
|
43
|
+
<div className='usher-issue-header__title-row'>
|
|
44
|
+
<h3 className='usher-issue-header__title'>{issue.title}</h3>
|
|
45
|
+
<Tag value={badge.label} severity={badge.severity} />
|
|
46
|
+
</div>
|
|
47
|
+
<p className='usher-issue-header__meta'>
|
|
48
|
+
{format(labels.issue.reported, { date: formatTime(reportedAt, locale) })} · {location}
|
|
49
|
+
</p>
|
|
50
|
+
{(issue.knownIssueTitle?.length > 0 || hasWorkItem) && (
|
|
51
|
+
<p className='usher-issue-header__links'>
|
|
52
|
+
{issue.knownIssueTitle?.length > 0 && (
|
|
53
|
+
<span>{labels.issue.knownIssue} <strong>{issue.knownIssueTitle}</strong></span>
|
|
54
|
+
)}
|
|
55
|
+
{hasWorkItem && (
|
|
56
|
+
<span>
|
|
57
|
+
{labels.issue.trackedIn}{' '}
|
|
58
|
+
{isWebAddress(workItem.url)
|
|
59
|
+
? <a href={workItem.url} target='_blank' rel='noreferrer'>{workItem.reference}</a>
|
|
60
|
+
: <strong>{workItem.reference}</strong>}
|
|
61
|
+
{' · '}
|
|
62
|
+
{isFixReleased(issue) ? format(labels.issue.fixedIn, { version: issue.fixedInVersion }) : labels.issue.notReleased}
|
|
63
|
+
</span>
|
|
64
|
+
)}
|
|
65
|
+
</p>
|
|
66
|
+
)}
|
|
67
|
+
</header>
|
|
68
|
+
);
|
|
69
|
+
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { Message } from '@cratis/components/Display';
|
|
5
|
+
import { Guid } from '@cratis/fundamentals';
|
|
6
|
+
import { ForIssue } from '@cratis/showrunner.usher';
|
|
7
|
+
import { UsherBoundary } from '../../Provider/UsherBoundary.js';
|
|
8
|
+
import { useUsherLabels } from '../../Provider/UsherContext.js';
|
|
9
|
+
import { isOpenQuestion } from '../conversationMessages.js';
|
|
10
|
+
import { AccessPanel } from './AccessPanel.js';
|
|
11
|
+
import { IdentityPanel } from './IdentityPanel.js';
|
|
12
|
+
import { IssueActions } from './IssueActions.js';
|
|
13
|
+
import { IssueConversationPanel } from './IssueConversationPanel.js';
|
|
14
|
+
import { IssueHeader } from './IssueHeader.js';
|
|
15
|
+
import { QuestionBanner } from './QuestionBanner.js';
|
|
16
|
+
import { StatusStrip } from './StatusStrip.js';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Props for {@link IssueView}.
|
|
20
|
+
*/
|
|
21
|
+
export interface IssueViewProps {
|
|
22
|
+
/** The issue to show. */
|
|
23
|
+
issueId: Guid;
|
|
24
|
+
|
|
25
|
+
/** Goes back to the list of issues; no back button when not given. */
|
|
26
|
+
onBack?: () => void;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* One of the signed-in reporter's issues: its state, the conversation with support, who support knows the reporter
|
|
31
|
+
* is, support's access, and what the reporter can do with it. It stays current as support works on the issue.
|
|
32
|
+
* Usable on its own, such as on a page of the solution, or inside the my issues side sheet.
|
|
33
|
+
*/
|
|
34
|
+
export const IssueView = (props: IssueViewProps) => (
|
|
35
|
+
<UsherBoundary>
|
|
36
|
+
<IssueViewContent {...props} />
|
|
37
|
+
</UsherBoundary>
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
const IssueViewContent = ({ issueId, onBack }: IssueViewProps) => {
|
|
41
|
+
const labels = useUsherLabels();
|
|
42
|
+
const [result] = ForIssue.use({ issueId });
|
|
43
|
+
|
|
44
|
+
// The query answers with the issue or with nothing: an issue the reporter did not report, or one support's session
|
|
45
|
+
// is not for, is never sent.
|
|
46
|
+
const issue = result.data?.[0];
|
|
47
|
+
const isLoaded = result.hasData && issue?.id !== undefined;
|
|
48
|
+
|
|
49
|
+
if (!isLoaded) {
|
|
50
|
+
return (
|
|
51
|
+
<div className='usher-issue-view'>
|
|
52
|
+
<Message severity={result.isPerforming ? 'info' : 'secondary'} text={result.isPerforming ? labels.issue.loading : labels.issue.notFound} />
|
|
53
|
+
</div>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const openQuestion = issue.openQuestion;
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
<div className='usher-issue-view'>
|
|
61
|
+
<IssueHeader issue={issue} onBack={onBack} />
|
|
62
|
+
<StatusStrip state={issue.state} />
|
|
63
|
+
{isOpenQuestion(openQuestion?.questionId) && <QuestionBanner question={openQuestion.question} />}
|
|
64
|
+
<div className='usher-issue-view__body'>
|
|
65
|
+
<IssueConversationPanel issue={issue} />
|
|
66
|
+
<aside className='usher-issue-view__side'>
|
|
67
|
+
<IdentityPanel issue={issue} />
|
|
68
|
+
<AccessPanel issue={issue} />
|
|
69
|
+
<IssueActions issue={issue} />
|
|
70
|
+
</aside>
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
);
|
|
74
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { Message } from '@cratis/components/Display';
|
|
5
|
+
import { format } from '../../Labels/index.js';
|
|
6
|
+
import { useUsherLabels } from '../../Provider/UsherContext.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Props for {@link QuestionBanner}.
|
|
10
|
+
*/
|
|
11
|
+
export interface QuestionBannerProps {
|
|
12
|
+
/** What support asked. */
|
|
13
|
+
question: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Tells the reporter that support waits for an answer, and that their next message answers it.
|
|
18
|
+
*/
|
|
19
|
+
export const QuestionBanner = ({ question }: QuestionBannerProps) => {
|
|
20
|
+
const labels = useUsherLabels();
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<div className='usher-question-banner'>
|
|
24
|
+
<Message severity='warn' text={format(labels.issue.questionBanner, { question })} />
|
|
25
|
+
</div>
|
|
26
|
+
);
|
|
27
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { CommandDialog } from '@cratis/components/CommandDialog';
|
|
5
|
+
import { TextAreaField } from '@cratis/components/CommandForm';
|
|
6
|
+
import { DialogInitialFocus } from '@cratis/components/Dialogs';
|
|
7
|
+
import { Guid } from '@cratis/fundamentals';
|
|
8
|
+
import { ReopenIssue } from '@cratis/showrunner.usher';
|
|
9
|
+
import { useUsherLabels } from '../../Provider/UsherContext.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Props for {@link ReopenIssueDialog}.
|
|
13
|
+
*/
|
|
14
|
+
export interface ReopenIssueDialogProps {
|
|
15
|
+
/** The issue. */
|
|
16
|
+
issueId: Guid;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Lets the reporter reopen a resolved issue, saying why it is not fixed.
|
|
21
|
+
*/
|
|
22
|
+
export const ReopenIssueDialog = ({ issueId }: ReopenIssueDialogProps) => {
|
|
23
|
+
const labels = useUsherLabels();
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<CommandDialog<ReopenIssue>
|
|
27
|
+
command={ReopenIssue}
|
|
28
|
+
title={labels.actions.reopenTitle}
|
|
29
|
+
okLabel={labels.actions.reopen}
|
|
30
|
+
cancelLabel={labels.common.cancel}
|
|
31
|
+
closeAriaLabel={labels.common.close}
|
|
32
|
+
initialFocus={DialogInitialFocus.Content}
|
|
33
|
+
initialValues={{ issueId, reason: '' }}>
|
|
34
|
+
<TextAreaField<ReopenIssue> value={command => command.reason} title={labels.actions.reopenReason} rows={4} />
|
|
35
|
+
</CommandDialog>
|
|
36
|
+
);
|
|
37
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { CommandDialog } from '@cratis/components/CommandDialog';
|
|
5
|
+
import { DialogInitialFocus } from '@cratis/components/Dialogs';
|
|
6
|
+
import { Guid } from '@cratis/fundamentals';
|
|
7
|
+
import { ShareIdentity } from '@cratis/showrunner.usher';
|
|
8
|
+
import { useUsherLabels } from '../../Provider/UsherContext.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Props for {@link ShareIdentityDialog}.
|
|
12
|
+
*/
|
|
13
|
+
export interface ShareIdentityDialogProps {
|
|
14
|
+
/** The issue. */
|
|
15
|
+
issueId: Guid;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Asks the reporter to confirm that support may know who they are on an issue. Sharing cannot be undone, so the
|
|
20
|
+
* dialog opens with focus on cancel.
|
|
21
|
+
*/
|
|
22
|
+
export const ShareIdentityDialog = ({ issueId }: ShareIdentityDialogProps) => {
|
|
23
|
+
const labels = useUsherLabels();
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<CommandDialog<ShareIdentity>
|
|
27
|
+
command={ShareIdentity}
|
|
28
|
+
title={labels.identity.shareTitle}
|
|
29
|
+
okLabel={labels.identity.shareConfirm}
|
|
30
|
+
cancelLabel={labels.common.cancel}
|
|
31
|
+
closeAriaLabel={labels.common.close}
|
|
32
|
+
initialFocus={DialogInitialFocus.Cancel}
|
|
33
|
+
initialValues={{ issueId }}>
|
|
34
|
+
<p className='usher-dialog-text'>{labels.identity.shareDescription}</p>
|
|
35
|
+
</CommandDialog>
|
|
36
|
+
);
|
|
37
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { IssueState } from '@cratis/showrunner.usher';
|
|
5
|
+
import { useUsherLabels } from '../../Provider/UsherContext.js';
|
|
6
|
+
import { stateBadgeFor, statusStepOf, statusSteps } from '../issueStates.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Props for {@link StatusStrip}.
|
|
10
|
+
*/
|
|
11
|
+
export interface StatusStripProps {
|
|
12
|
+
/** The state the issue is in. */
|
|
13
|
+
state: IssueState;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Shows how far along an issue is, from reported to resolved. The step reached is marked as the current step.
|
|
18
|
+
*/
|
|
19
|
+
export const StatusStrip = ({ state }: StatusStripProps) => {
|
|
20
|
+
const labels = useUsherLabels();
|
|
21
|
+
const reached = statusStepOf(state);
|
|
22
|
+
const closedOtherwise = state === IssueState.wontFix || state === IssueState.withdrawn;
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<ol className='usher-status-strip'>
|
|
26
|
+
{statusSteps.map((step, index) => {
|
|
27
|
+
const isCurrent = index === reached;
|
|
28
|
+
const label = isCurrent && closedOtherwise ? stateBadgeFor(state, labels).label : stateBadgeFor(step, labels).label;
|
|
29
|
+
return (
|
|
30
|
+
<li
|
|
31
|
+
key={step}
|
|
32
|
+
className='usher-status-strip__step'
|
|
33
|
+
data-reached={index <= reached || undefined}
|
|
34
|
+
data-current={isCurrent || undefined}
|
|
35
|
+
aria-current={isCurrent ? 'step' : undefined}>
|
|
36
|
+
{label}
|
|
37
|
+
</li>
|
|
38
|
+
);
|
|
39
|
+
})}
|
|
40
|
+
</ol>
|
|
41
|
+
);
|
|
42
|
+
};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { ConversationEntry, SupportSession } from '@cratis/showrunner.usher';
|
|
5
|
+
import { format } from '../../Labels/index.js';
|
|
6
|
+
import { useUsherContext } from '../../Provider/UsherContext.js';
|
|
7
|
+
import { formatClock, formatTime } from '../../Reporting/AccessChoice.js';
|
|
8
|
+
import { isSessionRunning } from '../accessStatus.js';
|
|
9
|
+
import { sessionActivityOf } from '../sessionActivity.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Props for {@link SupportSessions}.
|
|
13
|
+
*/
|
|
14
|
+
export interface SupportSessionsProps {
|
|
15
|
+
/** The sessions, oldest first. */
|
|
16
|
+
sessions: SupportSession[];
|
|
17
|
+
|
|
18
|
+
/** The entries of the conversation, to show what support did in each session. */
|
|
19
|
+
entries: ConversationEntry[];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Lists the sessions in which support signed in as the reporter, each with what support did as the reporter in it.
|
|
24
|
+
*/
|
|
25
|
+
export const SupportSessions = ({ sessions, entries }: SupportSessionsProps) => {
|
|
26
|
+
const { labels, locale } = useUsherContext();
|
|
27
|
+
|
|
28
|
+
if (sessions.length === 0) {
|
|
29
|
+
return <p className='usher-panel__text usher-panel__text--secondary'>{labels.accessPanel.noSessions}</p>;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<div className='usher-sessions'>
|
|
34
|
+
<span className='usher-sessions__heading'>{labels.accessPanel.sessionsHeading}</span>
|
|
35
|
+
<ul className='usher-sessions__list'>
|
|
36
|
+
{sessions.map(session => {
|
|
37
|
+
const start = formatTime(asDate(session.startedAt), locale);
|
|
38
|
+
const end = isSessionRunning(session) ? labels.accessPanel.sessionRunning : formatClock(asDate(session.endedAt), locale);
|
|
39
|
+
const name = (session.author?.name ?? '').length > 0 ? session.author.name : labels.conversation.support;
|
|
40
|
+
const activity = sessionActivityOf(session, entries, labels.accessPanel.sessionActions);
|
|
41
|
+
return (
|
|
42
|
+
<li key={session.sessionId.toString()}>
|
|
43
|
+
{format(labels.accessPanel.session, { name, start, end })}
|
|
44
|
+
{activity.length > 0
|
|
45
|
+
? (
|
|
46
|
+
<ul className='usher-sessions__activity'>
|
|
47
|
+
{activity.map(action => <li key={action.entryId}>{action.text}</li>)}
|
|
48
|
+
</ul>
|
|
49
|
+
)
|
|
50
|
+
: <p className='usher-sessions__activity usher-panel__text--secondary'>{labels.accessPanel.sessionDidNothing}</p>}
|
|
51
|
+
</li>
|
|
52
|
+
);
|
|
53
|
+
})}
|
|
54
|
+
</ul>
|
|
55
|
+
</div>
|
|
56
|
+
);
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const asDate = (value: Date | string) => value instanceof Date ? value : new Date(value);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
export * from './AccessPanel.js';
|
|
5
|
+
export * from './GrantAccessDialog.js';
|
|
6
|
+
export * from './IdentityPanel.js';
|
|
7
|
+
export * from './IssueActions.js';
|
|
8
|
+
export * from './IssueConversationPanel.js';
|
|
9
|
+
export * from './IssueHeader.js';
|
|
10
|
+
export * from './IssueView.js';
|
|
11
|
+
export * from './QuestionBanner.js';
|
|
12
|
+
export * from './ReopenIssueDialog.js';
|
|
13
|
+
export * from './ShareIdentityDialog.js';
|
|
14
|
+
export * from './StatusStrip.js';
|
|
15
|
+
export * from './SupportSessions.js';
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { Column, DataTableFilterMatchMode, DataTableForObservableQuery } from '@cratis/components/DataTables';
|
|
5
|
+
import { Tag } from '@cratis/components/Display';
|
|
6
|
+
import { IssueKind, MyIssues, ReportedIssue } from '@cratis/showrunner.usher';
|
|
7
|
+
import { format } from '../../Labels/index.js';
|
|
8
|
+
import { useUsherContext } from '../../Provider/UsherContext.js';
|
|
9
|
+
import { formatTime } from '../../Reporting/AccessChoice.js';
|
|
10
|
+
import { isClosed, stateBadgeFor, statusSteps } from '../issueStates.js';
|
|
11
|
+
import { isFixReleased } from '../MyIssuesList.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Props for {@link IssueList}.
|
|
15
|
+
*/
|
|
16
|
+
export interface IssueListProps {
|
|
17
|
+
/** Whether to list closed issues too. */
|
|
18
|
+
showClosed: boolean;
|
|
19
|
+
|
|
20
|
+
/** Opens an issue. */
|
|
21
|
+
onOpen: (issue: ReportedIssue) => void;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const openStates = statusSteps.filter(state => !isClosed(state));
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The signed-in reporter's issues, most recent activity first, as they change.
|
|
28
|
+
*/
|
|
29
|
+
export const IssueList = ({ showClosed, onOpen }: IssueListProps) => {
|
|
30
|
+
const { labels, locale } = useUsherContext();
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<DataTableForObservableQuery<MyIssues, ReportedIssue, object>
|
|
34
|
+
key={showClosed ? 'all' : 'open'}
|
|
35
|
+
query={MyIssues}
|
|
36
|
+
dataKey='id'
|
|
37
|
+
emptyMessage={labels.myIssues.empty}
|
|
38
|
+
filteredEmptyMessage={labels.myIssues.noOpenIssues}
|
|
39
|
+
loadingMessage={labels.myIssues.loading}
|
|
40
|
+
failureMessage={labels.myIssues.failed}
|
|
41
|
+
unauthorizedMessage={labels.myIssues.unauthorized}
|
|
42
|
+
defaultFilters={showClosed ? {} : { state: { value: openStates, matchMode: DataTableFilterMatchMode.In } }}
|
|
43
|
+
selectionMode='single'
|
|
44
|
+
selection={null}
|
|
45
|
+
onSelectionChange={event => {
|
|
46
|
+
if (event.value) {
|
|
47
|
+
onOpen(event.value);
|
|
48
|
+
}
|
|
49
|
+
}}>
|
|
50
|
+
<Column<ReportedIssue>
|
|
51
|
+
field='title'
|
|
52
|
+
header={labels.myIssues.issueColumn}
|
|
53
|
+
body={issue => (
|
|
54
|
+
<span className='usher-issue-list__title'>
|
|
55
|
+
<span>{issue.title}</span>
|
|
56
|
+
<span className='usher-issue-list__kind'>{issue.kind === IssueKind.error ? labels.myIssues.errorKind : labels.myIssues.manualKind}</span>
|
|
57
|
+
</span>
|
|
58
|
+
)} />
|
|
59
|
+
<Column<ReportedIssue>
|
|
60
|
+
field='state'
|
|
61
|
+
header={labels.myIssues.stateColumn}
|
|
62
|
+
body={issue => {
|
|
63
|
+
const badge = stateBadgeFor(issue.state, labels);
|
|
64
|
+
return (
|
|
65
|
+
<span className='usher-issue-list__state'>
|
|
66
|
+
<Tag value={badge.label} severity={badge.severity} />
|
|
67
|
+
{issue.waitingOnReporter && <Tag value={labels.myIssues.waitingForYou} severity='warn' />}
|
|
68
|
+
{isFixReleased(issue) && <Tag value={format(labels.myIssues.fixedIn, { version: issue.fixedInVersion })} severity='success' />}
|
|
69
|
+
</span>
|
|
70
|
+
);
|
|
71
|
+
}} />
|
|
72
|
+
<Column<ReportedIssue>
|
|
73
|
+
field='lastActivityAt'
|
|
74
|
+
header={labels.myIssues.lastActivityColumn}
|
|
75
|
+
body={issue => formatTime(issue.lastActivityAt instanceof Date ? issue.lastActivityAt : new Date(issue.lastActivityAt), locale)} />
|
|
76
|
+
</DataTableForObservableQuery>
|
|
77
|
+
);
|
|
78
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { Button, Switch } from '@cratis/components/Common';
|
|
5
|
+
import { Dialog, DialogInitialFocus } from '@cratis/components/Dialogs';
|
|
6
|
+
import { Guid } from '@cratis/fundamentals';
|
|
7
|
+
import { useReducer } from 'react';
|
|
8
|
+
import { BugIcon } from '../../Icons.js';
|
|
9
|
+
import { UsherBoundary } from '../../Provider/UsherBoundary.js';
|
|
10
|
+
import { useUsherLabels } from '../../Provider/UsherContext.js';
|
|
11
|
+
import { IssueView } from '../IssueView/IssueView.js';
|
|
12
|
+
import { IssueList } from './IssueList.js';
|
|
13
|
+
import { navigate, startNavigation } from './MyIssuesNavigation.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Props for {@link MyIssuesDialog}.
|
|
17
|
+
*/
|
|
18
|
+
export interface MyIssuesDialogProps {
|
|
19
|
+
/** The issue to open on; the list of issues when not given. */
|
|
20
|
+
issueId?: Guid;
|
|
21
|
+
|
|
22
|
+
/** Opens the report a problem dialog; no report button when not given. */
|
|
23
|
+
onReportIssue?: () => void;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The my issues side sheet: the signed-in reporter's issues, and one issue at a time with its conversation. Open it
|
|
28
|
+
* with `useDialog`.
|
|
29
|
+
*/
|
|
30
|
+
export const MyIssuesDialog = ({ issueId, onReportIssue }: MyIssuesDialogProps) => {
|
|
31
|
+
const labels = useUsherLabels();
|
|
32
|
+
const [navigation, dispatch] = useReducer(navigate, issueId, startNavigation);
|
|
33
|
+
if (navigation.requestedIssueId !== issueId) {
|
|
34
|
+
dispatch({ type: 'requested', issueId });
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<Dialog
|
|
39
|
+
title={labels.myIssues.title}
|
|
40
|
+
subtitle={labels.myIssues.description}
|
|
41
|
+
placement='end'
|
|
42
|
+
width='720px'
|
|
43
|
+
buttons={null}
|
|
44
|
+
dismissable
|
|
45
|
+
initialFocus={DialogInitialFocus.Content}
|
|
46
|
+
closeAriaLabel={labels.common.close}>
|
|
47
|
+
<UsherBoundary>
|
|
48
|
+
{navigation.openIssueId
|
|
49
|
+
? <IssueView issueId={navigation.openIssueId} onBack={() => dispatch({ type: 'back' })} />
|
|
50
|
+
: (
|
|
51
|
+
<div className='usher-my-issues'>
|
|
52
|
+
<div className='usher-my-issues__toolbar'>
|
|
53
|
+
{onReportIssue && (
|
|
54
|
+
<Button variant='solid' tone='accent' size='small' icon={<BugIcon />} label={labels.myIssues.reportProblem} onClick={onReportIssue} />
|
|
55
|
+
)}
|
|
56
|
+
<Switch label={labels.myIssues.showClosed} checked={navigation.showClosed} onChange={showClosed => dispatch({ type: 'showClosedChanged', showClosed })} />
|
|
57
|
+
</div>
|
|
58
|
+
<IssueList showClosed={navigation.showClosed} onOpen={issue => dispatch({ type: 'opened', issueId: issue.id })} />
|
|
59
|
+
</div>
|
|
60
|
+
)}
|
|
61
|
+
</UsherBoundary>
|
|
62
|
+
</Dialog>
|
|
63
|
+
);
|
|
64
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { Guid } from '@cratis/fundamentals';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Where the my issues side sheet is: the list, or one issue.
|
|
8
|
+
*/
|
|
9
|
+
export interface MyIssuesNavigation {
|
|
10
|
+
/** The issue shown; the list when not set. */
|
|
11
|
+
readonly openIssueId?: Guid;
|
|
12
|
+
|
|
13
|
+
/** The issue the side sheet was last asked to open on, so a new request moves to it. */
|
|
14
|
+
readonly requestedIssueId?: Guid;
|
|
15
|
+
|
|
16
|
+
/** Whether the list shows closed issues too. */
|
|
17
|
+
readonly showClosed: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Something that moves the my issues side sheet.
|
|
22
|
+
*/
|
|
23
|
+
export type MyIssuesNavigationAction =
|
|
24
|
+
| { readonly type: 'requested'; readonly issueId?: Guid }
|
|
25
|
+
| { readonly type: 'opened'; readonly issueId: Guid }
|
|
26
|
+
| { readonly type: 'back' }
|
|
27
|
+
| { readonly type: 'showClosedChanged'; readonly showClosed: boolean };
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Gets where the side sheet starts: on the issue asked for, or on the list of open issues.
|
|
31
|
+
* @param issueId The issue to open on; the list when not given.
|
|
32
|
+
* @returns The {@link MyIssuesNavigation}.
|
|
33
|
+
*/
|
|
34
|
+
export function startNavigation(issueId?: Guid): MyIssuesNavigation {
|
|
35
|
+
return { openIssueId: issueId, requestedIssueId: issueId, showClosed: false };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Moves the side sheet.
|
|
40
|
+
* @param navigation Where the side sheet is.
|
|
41
|
+
* @param action What moves it.
|
|
42
|
+
* @returns Where it is after.
|
|
43
|
+
*/
|
|
44
|
+
export function navigate(navigation: MyIssuesNavigation, action: MyIssuesNavigationAction): MyIssuesNavigation {
|
|
45
|
+
switch (action.type) {
|
|
46
|
+
case 'requested':
|
|
47
|
+
return sameIssue(navigation.requestedIssueId, action.issueId)
|
|
48
|
+
? navigation
|
|
49
|
+
: { ...navigation, openIssueId: action.issueId, requestedIssueId: action.issueId };
|
|
50
|
+
case 'opened':
|
|
51
|
+
return { ...navigation, openIssueId: action.issueId };
|
|
52
|
+
case 'back':
|
|
53
|
+
return { ...navigation, openIssueId: undefined };
|
|
54
|
+
case 'showClosedChanged':
|
|
55
|
+
return { ...navigation, showClosed: action.showClosed };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function sameIssue(left?: Guid, right?: Guid): boolean {
|
|
60
|
+
return left === right || (left !== undefined && right !== undefined && left.equals(right));
|
|
61
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { ReportedIssue } from '@cratis/showrunner.usher';
|
|
5
|
+
import { isClosed } from './issueStates.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Counts the issues support waits for the reporter on.
|
|
9
|
+
* @param issues The reporter's issues.
|
|
10
|
+
* @returns How many issues support waits for the reporter on.
|
|
11
|
+
*/
|
|
12
|
+
export function waitingCount(issues: ReportedIssue[]): number {
|
|
13
|
+
return issues.filter(issue => issue.waitingOnReporter).length;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Gets the issues to list.
|
|
18
|
+
* @param issues The reporter's issues, most recent activity first.
|
|
19
|
+
* @param showClosed Whether to list closed issues too.
|
|
20
|
+
* @returns The issues to list, in the order given.
|
|
21
|
+
*/
|
|
22
|
+
export function visibleIssues(issues: ReportedIssue[], showClosed: boolean): ReportedIssue[] {
|
|
23
|
+
return showClosed ? issues : issues.filter(issue => !isClosed(issue.state));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Checks whether a release has the fix for an issue.
|
|
28
|
+
* @param issue The issue.
|
|
29
|
+
* @returns True when a release has the fix.
|
|
30
|
+
*/
|
|
31
|
+
export function isFixReleased(issue: { fixedInVersion: string }): boolean {
|
|
32
|
+
return typeof issue.fixedInVersion === 'string' && issue.fixedInVersion.length > 0;
|
|
33
|
+
}
|