├── .gitattributes ├── .gitignore ├── Client ├── AssemblyInfo.cs ├── Interop.cs ├── Modules │ └── Syncfusion.Helpdesk │ │ ├── Edit.razor │ │ ├── EditTicket.razor │ │ ├── Index.razor │ │ ├── ModuleInfo.cs │ │ └── Settings.razor ├── Services │ ├── HelpDeskAdminService.cs │ ├── HelpDeskService.cs │ ├── IHelpDeskAdminService.cs │ └── IHelpDeskService.cs ├── Startup │ └── ClientStartup.cs ├── Syncfusion.HelpDesk.Client.csproj └── _Imports.razor ├── Package ├── Syncfusion.HelpDesk.Package.csproj ├── Syncfusion.HelpDesk.nuspec ├── debug.cmd └── release.cmd ├── README.md ├── Server ├── Controllers │ ├── HelpDeskAdminController.cs │ └── HelpDeskController.cs ├── Manager │ └── HelpDeskManager.cs ├── Repository │ ├── HelpDeskContext.cs │ ├── HelpDeskRepository.cs │ └── IHelpDeskRepository.cs ├── Scripts │ ├── Syncfusion.HelpDesk.1.0.0.sql │ ├── Syncfusion.HelpDesk.Uninstall.sql │ └── Syncfusion.Helpdesk.1.0.1.sql ├── Startup │ └── ServerStartup.cs ├── Syncfusion.HelpDesk.Server.csproj └── wwwroot │ ├── Modules │ └── Syncfusion.HelpDesk │ │ ├── Module.css │ │ └── Module.js │ └── _content │ ├── Placeholder.txt │ └── syncfusion.blazor │ ├── scripts │ ├── 0.js │ ├── 1.js │ ├── accordion-ddeaa8.min.js │ ├── accumulationchart-ddeaa8.min.js │ ├── button-ddeaa8.min.js │ ├── buttonsbase-ddeaa8.min.js │ ├── chart-ddeaa8.min.js │ ├── chartsbase-ddeaa8.min.js │ ├── compression-ddeaa8.min.js │ ├── contextmenu-ddeaa8.min.js │ ├── data-ddeaa8.min.js │ ├── diagrams-ddeaa8.min.js │ ├── dialog-ddeaa8.min.js │ ├── drawings-ddeaa8.min.js │ ├── excelexport-ddeaa8.min.js │ ├── fileutils-ddeaa8.min.js │ ├── inplaceeditor-ddeaa8.min.js │ ├── inputsbase-ddeaa8.min.js │ ├── listsbase-ddeaa8.min.js │ ├── listview-ddeaa8.min.js │ ├── navigationsbase-ddeaa8.min.js │ ├── officechart-ddeaa8.min.js │ ├── pdfexport-ddeaa8.min.js │ ├── pdfviewer-ddeaa8.min.js │ ├── popup-ddeaa8.min.js │ ├── popupsbase-ddeaa8.min.js │ ├── sf-accordion-ddeaa8.min.js │ ├── sf-accumulation-chart-ddeaa8.min.js │ ├── sf-barcode-ddeaa8.min.js │ ├── sf-bullet-chart-ddeaa8.min.js │ ├── sf-calendarbase-ddeaa8.min.js │ ├── sf-chart-ddeaa8.min.js │ ├── sf-circulargauge-ddeaa8.min.js │ ├── sf-colorpicker-ddeaa8.min.js │ ├── sf-contextmenu-ddeaa8.min.js │ ├── sf-dashboard-layout-ddeaa8.min.js │ ├── sf-datepicker-ddeaa8.min.js │ ├── sf-daterangepicker-ddeaa8.min.js │ ├── sf-dialog-ddeaa8.min.js │ ├── sf-documenteditor-ddeaa8.min.js │ ├── sf-documenteditorcontainer-ddeaa8.min.js │ ├── sf-drop-down-button-ddeaa8.min.js │ ├── sf-dropdownlist-ddeaa8.min.js │ ├── sf-filemanager-ddeaa8.min.js │ ├── sf-gantt-ddeaa8.min.js │ ├── sf-grid-ddeaa8.min.js │ ├── sf-heatmap-ddeaa8.min.js │ ├── sf-import-ddeaa8.min.js │ ├── sf-import-ie-ddeaa8.min.js │ ├── sf-import-script-ddeaa8.min.js │ ├── sf-inplaceeditor-ddeaa8.min.js │ ├── sf-kanban-ddeaa8.min.js │ ├── sf-lineargauge-ddeaa8.min.js │ ├── sf-listbox-ddeaa8.min.js │ ├── sf-listview-ddeaa8.min.js │ ├── sf-maps-ddeaa8.min.js │ ├── sf-maskedtextbox-ddeaa8.min.js │ ├── sf-menu-ddeaa8.min.js │ ├── sf-multiselect-ddeaa8.min.js │ ├── sf-numerictextbox-ddeaa8.min.js │ ├── sf-pivotview-ddeaa8.min.js │ ├── sf-progressbar-ddeaa8.min.js │ ├── sf-range-navigator-ddeaa8.min.js │ ├── sf-richtexteditor-ddeaa8.min.js │ ├── sf-schedule-ddeaa8.min.js │ ├── sf-sidebar-ddeaa8.min.js │ ├── sf-slider-ddeaa8.min.js │ ├── sf-smith-chart-ddeaa8.min.js │ ├── sf-sparkline-ddeaa8.min.js │ ├── sf-spinner-ddeaa8.min.js │ ├── sf-splitter-ddeaa8.min.js │ ├── sf-spreadsheet-ddeaa8.min.js │ ├── sf-stock-chart-ddeaa8.min.js │ ├── sf-svg-export-ddeaa8.min.js │ ├── sf-tab-ddeaa8.min.js │ ├── sf-textbox-ddeaa8.min.js │ ├── sf-timepicker-ddeaa8.min.js │ ├── sf-toast-ddeaa8.min.js │ ├── sf-toolbar-ddeaa8.min.js │ ├── sf-tooltip-ddeaa8.min.js │ ├── sf-treegrid-ddeaa8.min.js │ ├── sf-treemap-ddeaa8.min.js │ ├── sf-treeview-ddeaa8.min.js │ ├── sf-uploader-ddeaa8.min.js │ ├── sortable-ddeaa8.min.js │ ├── spinner-ddeaa8.min.js │ ├── splitbuttonsbase-ddeaa8.min.js │ ├── svgbase-ddeaa8.min.js │ ├── syncfusion-blazor-extended-ddeaa8.min.js │ ├── syncfusion-blazor.min.js │ ├── textbox-ddeaa8.min.js │ ├── toast-ddeaa8.min.js │ └── tooltip-ddeaa8.min.js │ └── styles │ ├── bootstrap-dark.css │ ├── bootstrap.css │ ├── bootstrap4.css │ ├── fabric-dark.css │ ├── fabric.css │ ├── highcontrast.css │ ├── material-dark.css │ └── material.css ├── Shared ├── Models │ ├── Helpdesk.cs │ ├── SyncfusionHelpDeskStatus.cs │ ├── SyncfusionHelpDeskTicketDetails.cs │ └── SyncfusionHelpDeskTickets.cs └── Syncfusion.HelpDesk.Shared.csproj └── Syncfusion.HelpDesk.sln /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Build results 17 | [Dd]ebug/ 18 | [Dd]ebugPublic/ 19 | [Rr]elease/ 20 | [Rr]eleases/ 21 | x64/ 22 | x86/ 23 | [Aa][Rr][Mm]/ 24 | [Aa][Rr][Mm]64/ 25 | bld/ 26 | [Bb]in/ 27 | [Oo]bj/ 28 | [Ll]og/ 29 | 30 | # Visual Studio 2015/2017 cache/options directory 31 | .vs/ 32 | # Uncomment if you have tasks that create the project's static files in wwwroot 33 | #wwwroot/ 34 | 35 | # Visual Studio 2017 auto generated files 36 | Generated\ Files/ 37 | 38 | # MSTest test Results 39 | [Tt]est[Rr]esult*/ 40 | [Bb]uild[Ll]og.* 41 | 42 | # NUNIT 43 | *.VisualState.xml 44 | TestResult.xml 45 | 46 | # Build Results of an ATL Project 47 | [Dd]ebugPS/ 48 | [Rr]eleasePS/ 49 | dlldata.c 50 | 51 | # Benchmark Results 52 | BenchmarkDotNet.Artifacts/ 53 | 54 | # .NET Core 55 | project.lock.json 56 | project.fragment.lock.json 57 | artifacts/ 58 | 59 | # StyleCop 60 | StyleCopReport.xml 61 | 62 | # Files built by Visual Studio 63 | *_i.c 64 | *_p.c 65 | *_h.h 66 | *.ilk 67 | *.meta 68 | *.obj 69 | *.iobj 70 | *.pch 71 | *.pdb 72 | *.ipdb 73 | *.pgc 74 | *.pgd 75 | *.rsp 76 | *.sbr 77 | *.tlb 78 | *.tli 79 | *.tlh 80 | *.tmp 81 | *.tmp_proj 82 | *_wpftmp.csproj 83 | *.log 84 | *.vspscc 85 | *.vssscc 86 | .builds 87 | *.pidb 88 | *.svclog 89 | *.scc 90 | 91 | # Chutzpah Test files 92 | _Chutzpah* 93 | 94 | # Visual C++ cache files 95 | ipch/ 96 | *.aps 97 | *.ncb 98 | *.opendb 99 | *.opensdf 100 | *.sdf 101 | *.cachefile 102 | *.VC.db 103 | *.VC.VC.opendb 104 | 105 | # Visual Studio profiler 106 | *.psess 107 | *.vsp 108 | *.vspx 109 | *.sap 110 | 111 | # Visual Studio Trace Files 112 | *.e2e 113 | 114 | # TFS 2012 Local Workspace 115 | $tf/ 116 | 117 | # Guidance Automation Toolkit 118 | *.gpState 119 | 120 | # ReSharper is a .NET coding add-in 121 | _ReSharper*/ 122 | *.[Rr]e[Ss]harper 123 | *.DotSettings.user 124 | 125 | # JustCode is a .NET coding add-in 126 | .JustCode 127 | 128 | # TeamCity is a build add-in 129 | _TeamCity* 130 | 131 | # DotCover is a Code Coverage Tool 132 | *.dotCover 133 | 134 | # AxoCover is a Code Coverage Tool 135 | .axoCover/* 136 | !.axoCover/settings.json 137 | 138 | # Visual Studio code coverage results 139 | *.coverage 140 | *.coveragexml 141 | 142 | # NCrunch 143 | _NCrunch_* 144 | .*crunch*.local.xml 145 | nCrunchTemp_* 146 | 147 | # MightyMoose 148 | *.mm.* 149 | AutoTest.Net/ 150 | 151 | # Web workbench (sass) 152 | .sass-cache/ 153 | 154 | # Installshield output folder 155 | [Ee]xpress/ 156 | 157 | # DocProject is a documentation generator add-in 158 | DocProject/buildhelp/ 159 | DocProject/Help/*.HxT 160 | DocProject/Help/*.HxC 161 | DocProject/Help/*.hhc 162 | DocProject/Help/*.hhk 163 | DocProject/Help/*.hhp 164 | DocProject/Help/Html2 165 | DocProject/Help/html 166 | 167 | # Click-Once directory 168 | publish/ 169 | 170 | # Publish Web Output 171 | *.[Pp]ublish.xml 172 | *.azurePubxml 173 | # Note: Comment the next line if you want to checkin your web deploy settings, 174 | # but database connection strings (with potential passwords) will be unencrypted 175 | *.pubxml 176 | *.publishproj 177 | 178 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 179 | # checkin your Azure Web App publish settings, but sensitive information contained 180 | # in these scripts will be unencrypted 181 | PublishScripts/ 182 | 183 | # NuGet Packages 184 | *.nupkg 185 | # The packages folder can be ignored because of Package Restore 186 | **/[Pp]ackages/* 187 | # except build/, which is used as an MSBuild target. 188 | !**/[Pp]ackages/build/ 189 | # Uncomment if necessary however generally it will be regenerated when needed 190 | #!**/[Pp]ackages/repositories.config 191 | # NuGet v3's project.json files produces more ignorable files 192 | *.nuget.props 193 | *.nuget.targets 194 | 195 | # Microsoft Azure Build Output 196 | csx/ 197 | *.build.csdef 198 | 199 | # Microsoft Azure Emulator 200 | ecf/ 201 | rcf/ 202 | 203 | # Windows Store app package directories and files 204 | AppPackages/ 205 | BundleArtifacts/ 206 | Package.StoreAssociation.xml 207 | _pkginfo.txt 208 | *.appx 209 | 210 | # Visual Studio cache files 211 | # files ending in .cache can be ignored 212 | *.[Cc]ache 213 | # but keep track of directories ending in .cache 214 | !?*.[Cc]ache/ 215 | 216 | # Others 217 | ClientBin/ 218 | ~$* 219 | *~ 220 | *.dbmdl 221 | *.dbproj.schemaview 222 | *.jfm 223 | *.pfx 224 | *.publishsettings 225 | orleans.codegen.cs 226 | 227 | # Including strong name files can present a security risk 228 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 229 | #*.snk 230 | 231 | # Since there are multiple workflows, uncomment next line to ignore bower_components 232 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 233 | #bower_components/ 234 | 235 | # RIA/Silverlight projects 236 | Generated_Code/ 237 | 238 | # Backup & report files from converting an old project file 239 | # to a newer Visual Studio version. Backup files are not needed, 240 | # because we have git ;-) 241 | _UpgradeReport_Files/ 242 | Backup*/ 243 | UpgradeLog*.XML 244 | UpgradeLog*.htm 245 | ServiceFabricBackup/ 246 | *.rptproj.bak 247 | 248 | # SQL Server files 249 | *.mdf 250 | *.ldf 251 | *.ndf 252 | 253 | # Business Intelligence projects 254 | *.rdl.data 255 | *.bim.layout 256 | *.bim_*.settings 257 | *.rptproj.rsuser 258 | *- Backup*.rdl 259 | 260 | # Microsoft Fakes 261 | FakesAssemblies/ 262 | 263 | # GhostDoc plugin setting file 264 | *.GhostDoc.xml 265 | 266 | # Node.js Tools for Visual Studio 267 | .ntvs_analysis.dat 268 | node_modules/ 269 | 270 | # Visual Studio 6 build log 271 | *.plg 272 | 273 | # Visual Studio 6 workspace options file 274 | *.opt 275 | 276 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 277 | *.vbw 278 | 279 | # Visual Studio LightSwitch build output 280 | **/*.HTMLClient/GeneratedArtifacts 281 | **/*.DesktopClient/GeneratedArtifacts 282 | **/*.DesktopClient/ModelManifest.xml 283 | **/*.Server/GeneratedArtifacts 284 | **/*.Server/ModelManifest.xml 285 | _Pvt_Extensions 286 | 287 | # Paket dependency manager 288 | .paket/paket.exe 289 | paket-files/ 290 | 291 | # FAKE - F# Make 292 | .fake/ 293 | 294 | # JetBrains Rider 295 | .idea/ 296 | *.sln.iml 297 | 298 | # CodeRush personal settings 299 | .cr/personal 300 | 301 | # Python Tools for Visual Studio (PTVS) 302 | __pycache__/ 303 | *.pyc 304 | 305 | # Cake - Uncomment if you are using it 306 | # tools/** 307 | # !tools/packages.config 308 | 309 | # Tabs Studio 310 | *.tss 311 | 312 | # Telerik's JustMock configuration file 313 | *.jmconfig 314 | 315 | # BizTalk build output 316 | *.btp.cs 317 | *.btm.cs 318 | *.odx.cs 319 | *.xsd.cs 320 | 321 | # OpenCover UI analysis results 322 | OpenCover/ 323 | 324 | # Azure Stream Analytics local run output 325 | ASALocalRun/ 326 | 327 | # MSBuild Binary and Structured Log 328 | *.binlog 329 | 330 | # NVidia Nsight GPU debugger configuration file 331 | *.nvuser 332 | 333 | # MFractors (Xamarin productivity tool) working folder 334 | .mfractor/ 335 | 336 | # Local History for Visual Studio 337 | .localhistory/ 338 | 339 | # BeatPulse healthcheck temp database 340 | healthchecksdb -------------------------------------------------------------------------------- /Client/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Resources; 2 | using Microsoft.Extensions.Localization; 3 | 4 | [assembly: RootNamespace("Syncfusion.Helpdesk.Client")] -------------------------------------------------------------------------------- /Client/Interop.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.JSInterop; 2 | using System.Threading.Tasks; 3 | 4 | namespace Syncfusion.Helpdesk 5 | { 6 | public class Interop 7 | { 8 | private readonly IJSRuntime _jsRuntime; 9 | 10 | public Interop(IJSRuntime jsRuntime) 11 | { 12 | _jsRuntime = jsRuntime; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Client/Modules/Syncfusion.Helpdesk/Edit.razor: -------------------------------------------------------------------------------- 1 | @using Oqtane.Modules.Controls 2 | @using Syncfusion.Helpdesk.Services 3 | @using Syncfusion.Helpdesk.Models 4 | @using Syncfusion.Helpdesk.Client.Modules.Syncfusion_Helpdesk 5 | 6 | @namespace Syncfusion.Helpdesk 7 | @inherits ModuleBase 8 | @inject IHelpdeskAdminService HelpdeskAdminService 9 | @inject NavigationManager NavigationManager 10 | 11 |
12 | 19 | 21 | 22 | 23 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 36 | 37 | 38 | 39 | 43 | 44 | 47 | 48 | 52 | 53 | 56 | 57 | 58 | 59 |
60 | 61 | 67 | 68 |
EDIT TICKET # @SelectedTicket.HelpDeskTicketId
69 | 70 | 71 | 72 | 73 |
74 | 79 |
80 |
81 |
82 |
83 | 84 | 90 | 91 |
DELETE RECORD ?
92 | 93 |
94 | 99 | 104 |
105 |
106 |
107 |
108 | 109 | @code { 110 | // This ensures only users with this security level Edit 111 | // can open this control 112 | public override SecurityAccessLevel 113 | SecurityAccessLevel => SecurityAccessLevel.Edit; 114 | 115 | public override string Actions => "Add,Edit"; 116 | 117 | public override string Title => "Manage HelpDesk"; 118 | 119 | public override List Resources => new List() 120 | { 121 | new Resource { 122 | ResourceType = ResourceType.Stylesheet, 123 | Url = ModulePath() + "Module.css" }, 124 | 125 | // Only register .css files 126 | // The JavaScript files will automatically be pulled 127 | // from the _content/syncfusion.blazor directory 128 | // so they do not need to be registered here 129 | new Resource { ResourceType = ResourceType.Stylesheet, 130 | Url = "_content/Syncfusion.Blazor/" + 131 | "styles/bootstrap4.css" }, 132 | 133 | new Resource { ResourceType = ResourceType.Stylesheet, 134 | Url = "_content/Syncfusion.Blazor/" + 135 | "styles/material-dark.css" }, 136 | 137 | new Resource { ResourceType = ResourceType.Script, 138 | Url = "https://kit.fontawesome.com/a076d05399.js" } 139 | }; 140 | 141 | // Global property for the selected Help Desk Ticket 142 | private SyncfusionHelpDeskTickets SelectedTicket = 143 | new SyncfusionHelpDeskTickets(); 144 | 145 | SfGrid gridObj; 146 | 147 | public List 148 | colHelpDeskTickets 149 | { get; set; } 150 | 151 | string SfDataManagerURL = ""; 152 | 153 | protected override async Task OnInitializedAsync() 154 | { 155 | try 156 | { 157 | SfDataManagerURL = 158 | $"{ModuleState.SiteId}/api/HelpdeskAdmin?" + 159 | $"entityid={ModuleState.ModuleId}"; 160 | } 161 | catch (Exception ex) 162 | { 163 | await logger.LogError(ex, "Error Loading HelpDesk {Error}", 164 | ex.Message); 165 | 166 | AddModuleMessage("Error Loading HelpDesk", MessageType.Error); 167 | } 168 | } 169 | 170 | public async void OnCommandClicked( 171 | CommandClickEventArgs args) 172 | { 173 | if (args.CommandColumn.ButtonOption.Content == "Edit") 174 | { 175 | // Get the selected Help Desk Ticket 176 | var HelpDeskTicket = (SyncfusionHelpDeskTickets)args.RowData; 177 | 178 | SelectedTicket = 179 | await HelpdeskAdminService.GetSyncfusionHelpDeskTicketAdminAsync 180 | (HelpDeskTicket.HelpDeskTicketId, ModuleState.ModuleId); 181 | 182 | // Open the Edit dialog 183 | this.EditDialogVisibility = true; 184 | StateHasChanged(); 185 | } 186 | 187 | if (args.CommandColumn.ButtonOption.Content == "Delete") 188 | { 189 | SelectedTicket = new SyncfusionHelpDeskTickets(); 190 | SelectedTicket.HelpDeskTicketId = args.RowData.HelpDeskTicketId; 191 | 192 | // Open Delete confirmation dialog 193 | this.DeleteRecordConfirmVisibility = true; 194 | StateHasChanged(); 195 | } 196 | 197 | } 198 | 199 | public async Task SaveTicket() 200 | { 201 | // Update the selected Help Desk Ticket 202 | await HelpdeskAdminService. 203 | UpdateSyncfusionHelpDeskTicketsAdminAsync(SelectedTicket); 204 | 205 | // Close the Edit dialog 206 | this.EditDialogVisibility = false; 207 | 208 | // Refresh the SfGrid 209 | // so the changes to the selected 210 | // Help Desk Ticket are reflected 211 | gridObj.Refresh(); 212 | } 213 | 214 | public bool EditDialogVisibility { get; set; } = false; 215 | 216 | // Property to control the delete dialog 217 | public bool DeleteRecordConfirmVisibility { get; set; } = false; 218 | 219 | public void ConfirmDeleteNo() 220 | { 221 | this.DeleteRecordConfirmVisibility = false; 222 | } 223 | 224 | public async void ConfirmDeleteYes() 225 | { 226 | // The user selected Yes to delete the 227 | // selected Help Desk Ticket 228 | // Delete the record 229 | await HelpdeskAdminService. 230 | DeleteSyncfusionHelpDeskTicketsAsync( 231 | SelectedTicket.HelpDeskTicketId, 232 | ModuleState.ModuleId); 233 | 234 | // Close the dialog 235 | this.DeleteRecordConfirmVisibility = false; 236 | StateHasChanged(); 237 | 238 | // Refresh the SfGrid 239 | // so the deleted record will not show 240 | gridObj.Refresh(); 241 | } 242 | } -------------------------------------------------------------------------------- /Client/Modules/Syncfusion.Helpdesk/EditTicket.razor: -------------------------------------------------------------------------------- 1 | @using System.Security.Claims; 2 | @using Syncfusion.Blazor.DropDowns 3 | @using Syncfusion.Helpdesk.Models 4 | 5 |
6 | 13 | 15 | 16 | 17 | 18 | 19 |
20 |
21 | 28 | 29 |
30 |
31 | 35 | 36 |
37 | 38 | @if (SelectedTicket.SyncfusionHelpDeskTicketDetails != null) 39 | { 40 | @if (SelectedTicket.SyncfusionHelpDeskTicketDetails.Count() > 0) 41 | { 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | @foreach (var TicketDetail in 51 | SelectedTicket.SyncfusionHelpDeskTicketDetails) 52 | { 53 | 54 | 57 | 60 | 61 | } 62 | 63 |
DateDescription
55 | @TicketDetail.TicketDetailDate.ToShortDateString() 56 | 58 | @TicketDetail.TicketDescription 59 |
64 | } 65 | 67 | 68 | 70 | Add 71 | 72 | } 73 | 74 | @code { 75 | [Parameter] 76 | public SyncfusionHelpDeskTickets SelectedTicket { get; set; } 77 | 78 | [Parameter] 79 | public bool isAdmin { get; set; } 80 | 81 | string NewHelpDeskTicketDetailText = ""; 82 | 83 | private void AddHelpDeskTicketDetail() 84 | { 85 | // Create New HelpDeskTicketDetails record 86 | SyncfusionHelpDeskTicketDetails NewHelpDeskTicketDetail = 87 | new SyncfusionHelpDeskTicketDetails(); 88 | 89 | NewHelpDeskTicketDetail.HelpDeskTicketId = 90 | SelectedTicket.HelpDeskTicketId; 91 | 92 | NewHelpDeskTicketDetail.TicketDetailDate = 93 | DateTime.Now; 94 | 95 | NewHelpDeskTicketDetail.TicketDescription = 96 | NewHelpDeskTicketDetailText; 97 | 98 | // Add to collection 99 | SelectedTicket.SyncfusionHelpDeskTicketDetails 100 | .Add(NewHelpDeskTicketDetail); 101 | 102 | // Clear the Text Box 103 | NewHelpDeskTicketDetailText = ""; 104 | } 105 | 106 | } 107 | -------------------------------------------------------------------------------- /Client/Modules/Syncfusion.Helpdesk/ModuleInfo.cs: -------------------------------------------------------------------------------- 1 | using Oqtane.Models; 2 | using Oqtane.Modules; 3 | 4 | namespace Syncfusion.Helpdesk 5 | { 6 | public class ModuleInfo : IModule 7 | { 8 | public ModuleDefinition ModuleDefinition => new ModuleDefinition 9 | { 10 | Name = "Helpdesk", 11 | Description = "Helpdesk", 12 | Version = "1.0.1", 13 | ServerManagerType = "Syncfusion.Helpdesk.Manager.HelpdeskManager, Syncfusion.Helpdesk.Server.Oqtane", 14 | ReleaseVersions = "1.0.0,1.0.1", 15 | Dependencies = "Syncfusion.Helpdesk.Shared.Oqtane,Syncfusion.Blazor,Syncfusion.ExcelExport.Net,Syncfusion.Licensing,Syncfusion.PdfExport.Net,Newtonsoft.Json" 16 | }; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Client/Modules/Syncfusion.Helpdesk/Settings.razor: -------------------------------------------------------------------------------- 1 | @namespace Syncfusion.Helpdesk 2 | @inherits ModuleBase 3 | @inject ISettingService SettingService 4 | 5 | 6 | 7 | 10 | 13 | 14 |
8 | 9 | 11 | 12 |
15 | 16 | @code { 17 | public override string Title => "Helpdesk Settings"; 18 | 19 | string _value; 20 | 21 | protected override async Task OnInitializedAsync() 22 | { 23 | try 24 | { 25 | Dictionary settings = await SettingService.GetModuleSettingsAsync(ModuleState.ModuleId); 26 | _value = SettingService.GetSetting(settings, "SettingName", ""); 27 | } 28 | catch (Exception ex) 29 | { 30 | ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error); 31 | } 32 | } 33 | 34 | public async Task UpdateSettings() 35 | { 36 | try 37 | { 38 | Dictionary settings = await SettingService.GetModuleSettingsAsync(ModuleState.ModuleId); 39 | SettingService.SetSetting(settings, "SettingName", _value); 40 | await SettingService.UpdateModuleSettingsAsync(settings, ModuleState.ModuleId); 41 | } 42 | catch (Exception ex) 43 | { 44 | ModuleInstance.AddModuleMessage(ex.Message, MessageType.Error); 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Client/Services/HelpDeskAdminService.cs: -------------------------------------------------------------------------------- 1 | using Oqtane.Modules; 2 | using Oqtane.Services; 3 | using Oqtane.Shared; 4 | using System.Net.Http; 5 | using System.Threading.Tasks; 6 | using Syncfusion.Helpdesk.Models; 7 | 8 | namespace Syncfusion.Helpdesk.Services 9 | { 10 | public class HelpdeskAdminService : 11 | ServiceBase, IHelpdeskAdminService, IService 12 | { 13 | private readonly SiteState _siteState; 14 | 15 | public HelpdeskAdminService( 16 | HttpClient http, 17 | SiteState siteState) : base(http) 18 | { 19 | _siteState = siteState; 20 | } 21 | 22 | private string Apiurl => CreateApiUrl( 23 | _siteState.Alias, "HelpdeskAdmin"); 24 | 25 | public async Task 26 | GetSyncfusionHelpDeskTicketAdminAsync( 27 | int HelpDeskTicketId, int ModuleId) 28 | { 29 | return await GetJsonAsync( 30 | CreateAuthorizationPolicyUrl( 31 | $"{Apiurl}/{HelpDeskTicketId}", 32 | ModuleId)); 33 | } 34 | 35 | public async Task 36 | UpdateSyncfusionHelpDeskTicketsAdminAsync( 37 | Models.SyncfusionHelpDeskTickets objSyncfusionHelpDeskTicket) 38 | { 39 | return await PutJsonAsync( 40 | CreateAuthorizationPolicyUrl( 41 | $"{Apiurl}/{objSyncfusionHelpDeskTicket.HelpDeskTicketId}", 42 | objSyncfusionHelpDeskTicket.ModuleId), 43 | objSyncfusionHelpDeskTicket); 44 | } 45 | 46 | public async Task DeleteSyncfusionHelpDeskTicketsAsync( 47 | int HelpDeskId, int ModuleId) 48 | { 49 | await DeleteAsync(CreateAuthorizationPolicyUrl( 50 | $"{Apiurl}/{HelpDeskId}", ModuleId)); 51 | } 52 | } 53 | } -------------------------------------------------------------------------------- /Client/Services/HelpDeskService.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using System.Net.Http; 4 | using System.Threading.Tasks; 5 | using Oqtane.Modules; 6 | using Oqtane.Services; 7 | using Oqtane.Shared; 8 | using Syncfusion.Helpdesk.Models; 9 | 10 | namespace Syncfusion.Helpdesk.Services 11 | { 12 | public class HelpdeskService : 13 | ServiceBase, IHelpdeskService, IService 14 | { 15 | private readonly SiteState _siteState; 16 | 17 | public HelpdeskService( 18 | HttpClient http, SiteState siteState) : base(http) 19 | { 20 | _siteState = siteState; 21 | } 22 | 23 | private string Apiurl => CreateApiUrl(_siteState.Alias, "Helpdesk"); 24 | 25 | public async Task> 26 | GetSyncfusionHelpDeskTicketsByUserAsync( 27 | int ModuleId, string username) 28 | { 29 | return await GetJsonAsync>( 30 | CreateAuthorizationPolicyUrl( 31 | $"{Apiurl}?username={username}", ModuleId)); 32 | } 33 | 34 | public async Task 35 | GetSyncfusionHelpDeskTicketByUserAsync( 36 | int HelpDeskTicketId, int ModuleId, string username) 37 | { 38 | return await GetJsonAsync( 39 | CreateAuthorizationPolicyUrl( 40 | $"{Apiurl}/{HelpDeskTicketId}?&username={username}", ModuleId)); 41 | } 42 | 43 | public async Task 44 | AddSyncfusionHelpDeskTicketsAsync( 45 | SyncfusionHelpDeskTickets SyncfusionHelpDeskTickets) 46 | { 47 | return await PostJsonAsync( 48 | CreateAuthorizationPolicyUrl($"{Apiurl}", 49 | SyncfusionHelpDeskTickets.ModuleId), 50 | SyncfusionHelpDeskTickets); 51 | } 52 | 53 | public async Task 54 | UpdateSyncfusionHelpDeskTicketsAsync( 55 | SyncfusionHelpDeskTickets objSyncfusionHelpDeskTicket) 56 | { 57 | return await PostJsonAsync( 58 | CreateAuthorizationPolicyUrl( 59 | $"{Apiurl}/{objSyncfusionHelpDeskTicket.HelpDeskTicketId}", 60 | objSyncfusionHelpDeskTicket.ModuleId), 61 | objSyncfusionHelpDeskTicket); 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /Client/Services/IHelpDeskAdminService.cs: -------------------------------------------------------------------------------- 1 | using Syncfusion.Helpdesk.Models; 2 | using System.Threading.Tasks; 3 | 4 | namespace Syncfusion.Helpdesk.Services 5 | { 6 | public interface IHelpdeskAdminService 7 | { 8 | // Admin Methods 9 | 10 | Task 11 | GetSyncfusionHelpDeskTicketAdminAsync( 12 | int HelpDeskTicketId, int ModuleId); 13 | 14 | Task 15 | UpdateSyncfusionHelpDeskTicketsAdminAsync( 16 | SyncfusionHelpDeskTickets objSyncfusionHelpDeskTicket); 17 | 18 | Task DeleteSyncfusionHelpDeskTicketsAsync( 19 | int Id, int ModuleId); 20 | } 21 | } -------------------------------------------------------------------------------- /Client/Services/IHelpDeskService.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading.Tasks; 3 | using Syncfusion.Helpdesk.Models; 4 | 5 | namespace Syncfusion.Helpdesk.Services 6 | { 7 | public interface IHelpdeskService 8 | { 9 | Task> 10 | GetSyncfusionHelpDeskTicketsByUserAsync( 11 | int ModuleId, string username); 12 | 13 | Task 14 | GetSyncfusionHelpDeskTicketByUserAsync( 15 | int HelpDeskTicketId, int ModuleId, string username); 16 | 17 | Task 18 | AddSyncfusionHelpDeskTicketsAsync( 19 | SyncfusionHelpDeskTickets SyncfusionHelpDeskTickets); 20 | 21 | Task 22 | UpdateSyncfusionHelpDeskTicketsAsync( 23 | SyncfusionHelpDeskTickets SyncfusionHelpDeskTickets); 24 | } 25 | } -------------------------------------------------------------------------------- /Client/Startup/ClientStartup.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.DependencyInjection; 2 | using Oqtane.Services; 3 | using Syncfusion.Blazor; 4 | namespace Syncfusion.Helpdesk.Client.Startup 5 | { 6 | public class ClientStartup : IClientStartup 7 | { 8 | public void ConfigureServices(IServiceCollection services) 9 | { 10 | services.AddSyncfusionBlazor(); 11 | //Syncfusion.Licensing.SyncfusionLicenseProvider 12 | //.RegisterLicense("Enter Your Syncfusion License Here"); 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /Client/Syncfusion.HelpDesk.Client.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net8.0 5 | 3.0 6 | 1.0.0 7 | Syncfusion 8 | Syncfusion 9 | Helpdesk 10 | Syncfusion.Helpdesk 11 | Syncfusion 12 | Syncfusion.Helpdesk.Client.Oqtane 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | false 37 | false 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /Client/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using System 2 | @using System.Linq 3 | @using System.Collections.Generic 4 | @using System.Net.Http 5 | @using System.Net.Http.Json 6 | 7 | @using Microsoft.AspNetCore.Components.Routing 8 | @using Microsoft.AspNetCore.Components.Web 9 | @using Microsoft.JSInterop 10 | 11 | @using Oqtane.Models 12 | @using Oqtane.Modules 13 | @using Oqtane.Modules.Controls 14 | @using Oqtane.Providers 15 | @using Oqtane.Security 16 | @using Oqtane.Services 17 | @using Oqtane.Shared 18 | @using Oqtane.Themes 19 | @using Oqtane.Themes.Controls 20 | @using Oqtane.UI 21 | @using Oqtane.Enums 22 | 23 | @using Microsoft.AspNetCore.Components.Forms 24 | @using Syncfusion.Blazor 25 | @using Syncfusion.Blazor.Inputs 26 | @using Syncfusion.Blazor.Popups 27 | @using Syncfusion.Blazor.Data 28 | @using Syncfusion.Blazor.DropDowns 29 | @using Syncfusion.Blazor.Layouts 30 | @using Syncfusion.Blazor.Calendars 31 | @using Syncfusion.Blazor.Navigations 32 | @using Syncfusion.Blazor.Lists 33 | @using Syncfusion.Blazor.Grids 34 | @using Syncfusion.Blazor.Buttons 35 | @using Syncfusion.Blazor.Notifications 36 | -------------------------------------------------------------------------------- /Package/Syncfusion.HelpDesk.Package.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net8.0 5 | false 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Package/Syncfusion.HelpDesk.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Syncfusion.Helpdesk 5 | 1.0.0 6 | Syncfusion 7 | Syncfusion 8 | Helpdesk 9 | Helpdesk 10 | Syncfusion 11 | false 12 | MIT 13 | https://github.com/oqtane/oqtane.framework 14 | https://www.oqtane.org/Portals/0/icon.jpg 15 | oqtane module 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /Package/debug.cmd: -------------------------------------------------------------------------------- 1 | XCOPY "..\Client\bin\Debug\net8.0\Syncfusion.Helpdesk.Client.Oqtane.dll" "..\..\oqtane.framework\Oqtane.Server\bin\Debug\net8.0\" /Y 2 | XCOPY "..\Client\bin\Debug\net8.0\Syncfusion.Helpdesk.Client.Oqtane.pdb" "..\..\oqtane.framework\Oqtane.Server\bin\Debug\net8.0\" /Y 3 | XCOPY "..\Server\bin\Debug\net8.0\Syncfusion.Helpdesk.Server.Oqtane.dll" "..\..\oqtane.framework\Oqtane.Server\bin\Debug\net8.0\" /Y 4 | XCOPY "..\Server\bin\Debug\net8.0\Syncfusion.Helpdesk.Server.Oqtane.pdb" "..\..\oqtane.framework\Oqtane.Server\bin\Debug\net8.0\" /Y 5 | XCOPY "..\Shared\bin\Debug\net8.0\Syncfusion.Helpdesk.Shared.Oqtane.dll" "..\..\oqtane.framework\Oqtane.Server\bin\Debug\net8.0\" /Y 6 | XCOPY "..\Shared\bin\Debug\net8.0\Syncfusion.Helpdesk.Shared.Oqtane.pdb" "..\..\oqtane.framework\Oqtane.Server\bin\Debug\net8.0\" /Y 7 | XCOPY "..\Server\wwwroot\*" "..\..\oqtane.framework\Oqtane.Server\wwwroot\" /Y /S /I 8 | XCOPY "..\Server\bin\Debug\net8.0\Syncfusion.Blazor.dll" "..\..\oqtane.framework\Oqtane.Server\bin\Debug\net8.0\" /Y 9 | XCOPY "..\Server\bin\Debug\net8.0\Syncfusion.ExcelExport.Net.dll" "..\..\oqtane.framework\Oqtane.Server\bin\Debug\net8.0\" /Y 10 | XCOPY "..\Server\bin\Debug\net8.0\Syncfusion.Licensing.dll" "..\..\oqtane.framework\Oqtane.Server\bin\Debug\net8.0\" /Y 11 | XCOPY "..\Server\bin\Debug\net8.0\Syncfusion.PdfExport.Net.dll" "..\..\oqtane.framework\Oqtane.Server\bin\Debug\net8.0\" /Y 12 | XCOPY "..\Server\bin\Debug\net8.0\Newtonsoft.Json.dll" "..\..\oqtane.framework\Oqtane.Server\bin\Debug\net8.0\" /Y -------------------------------------------------------------------------------- /Package/release.cmd: -------------------------------------------------------------------------------- 1 | "..\..\oqtane.framework\oqtane.package\nuget.exe" pack Syncfusion.Helpdesk.nuspec 2 | XCOPY "*.nupkg" "..\..\oqtane.framework\Oqtane.Server\wwwroot\Modules\" /Y 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Oqtane.SyncfusionHelpDesk 2 | Blazor Oqtane Syncfusion Help Desk 3 | ![ScreenShot](https://user-images.githubusercontent.com/1857799/113523438-7a850580-955c-11eb-9b3b-b44f067e562d.png) 4 | 5 | ![Animation](https://user-images.githubusercontent.com/1857799/111890181-57772500-89a4-11eb-85c3-4e4cff6b1da8.gif) 6 | 7 | ### Also See 8 | * [SyncfusionHelpDesk - Sever Side Blazor version](https://github.com/ADefWebserver/SyncfusionHelpDesk) 9 | * [SyncfusionHelpDesk - Blazor WebAssembly version](https://github.com/ADefWebserver/SyncfusionHelpDeskClient) 10 | 11 | ### Free E-Book 12 | ![custom-blazor-oqtane-modules-succinctly](https://user-images.githubusercontent.com/1857799/138502674-abf9ac35-6ca9-42b3-93a3-e73c3e7d2140.png) 13 | 14 | [Custom Blazor Oqtane Modules Succinctly](https://www.syncfusion.com/succinctly-free-ebooks/custom-blazor-oqtane-modules-succinctly/create-the-help-desk-module) 15 | 16 | ### Updates 17 | [I tried to setup my oqtane project with syncfusion, but it don't work #3066](https://github.com/oqtane/oqtane.framework/discussions/3066) 18 | -------------------------------------------------------------------------------- /Server/Controllers/HelpDeskAdminController.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Mvc; 2 | using Microsoft.AspNetCore.Authorization; 3 | using Microsoft.Extensions.Primitives; 4 | using System.Collections.Generic; 5 | using Microsoft.AspNetCore.Http; 6 | using Oqtane.Shared; 7 | using Oqtane.Enums; 8 | using Oqtane.Infrastructure; 9 | using Syncfusion.Helpdesk.Models; 10 | using Syncfusion.Helpdesk.Repository; 11 | using System.Linq; 12 | using System.Threading.Tasks; 13 | using Oqtane.Repository; 14 | using System.Linq.Expressions; 15 | using System; 16 | 17 | namespace Syncfusion.Helpdesk.Controllers 18 | { 19 | [Route(ControllerRoutes.Default)] 20 | public class HelpdeskAdminController : Controller 21 | { 22 | private readonly IHelpdeskRepository _HelpDeskRepository; 23 | private readonly IUserRepository _users; 24 | private readonly ILogManager _logger; 25 | protected int _entityId = -1; 26 | 27 | public HelpdeskAdminController( 28 | IHelpdeskRepository HelpDeskRepository, 29 | IUserRepository users, 30 | ILogManager logger, 31 | IHttpContextAccessor accessor) 32 | { 33 | try 34 | { 35 | _HelpDeskRepository = HelpDeskRepository; 36 | _users = users; 37 | _logger = logger; 38 | 39 | if (accessor.HttpContext 40 | .Request.Query.ContainsKey("entityid")) 41 | { 42 | _entityId = int.Parse( 43 | accessor.HttpContext 44 | .Request.Query["entityid"]); 45 | } 46 | } 47 | catch (System.Exception ex) 48 | { 49 | string error = ex.Message; 50 | } 51 | } 52 | 53 | // Only an Administrator can query all Tickets 54 | // GET: api/?entityid=x 55 | [HttpGet] 56 | [Authorize(Policy = PolicyNames.EditModule)] 57 | public object Get(string entityid) 58 | { 59 | StringValues Skip; 60 | StringValues Take; 61 | StringValues OrderBy; 62 | 63 | // Filter the data 64 | var TotalRecordCount = 65 | _HelpDeskRepository.GetSyncfusionHelpDeskTickets( 66 | int.Parse(entityid)).Count(); 67 | 68 | int skip = (Request.Query.TryGetValue("$skip", out Skip)) 69 | ? Convert.ToInt32(Skip[0]) : 0; 70 | 71 | int top = (Request.Query.TryGetValue("$top", out Take)) 72 | ? Convert.ToInt32(Take[0]) : TotalRecordCount; 73 | 74 | string orderby = 75 | (Request.Query.TryGetValue("$orderby", out OrderBy)) 76 | ? OrderBy.ToString() : "TicketDate"; 77 | 78 | // Handle OrderBy direction 79 | if (orderby.EndsWith(" desc")) 80 | { 81 | orderby = orderby.Replace(" desc", ""); 82 | 83 | return new 84 | { 85 | Items = 86 | _HelpDeskRepository.GetSyncfusionHelpDeskTickets( 87 | int.Parse(entityid)) 88 | .OrderByDescending(orderby) 89 | .Skip(skip) 90 | .Take(top), 91 | Count = TotalRecordCount 92 | }; 93 | } 94 | else 95 | { 96 | System.Reflection.PropertyInfo prop = 97 | typeof(SyncfusionHelpDeskTickets).GetProperty(orderby); 98 | 99 | return new 100 | { 101 | Items = _HelpDeskRepository.GetSyncfusionHelpDeskTickets( 102 | int.Parse(entityid)) 103 | .OrderBy(orderby) 104 | .Skip(skip) 105 | .Take(top), 106 | Count = TotalRecordCount 107 | }; 108 | } 109 | } 110 | 111 | // Only an Administrator can call this method 112 | // GET: api//1?entityid=z 113 | [HttpGet("{HelpDeskTicketId}")] 114 | [Authorize(Policy = PolicyNames.EditModule)] 115 | public SyncfusionHelpDeskTickets Get( 116 | string HelpDeskTicketId, 117 | string entityid) 118 | { 119 | return _HelpDeskRepository.GetSyncfusionHelpDeskTicket 120 | (int.Parse(HelpDeskTicketId)); 121 | } 122 | 123 | // Only an Administrator can update using this method 124 | // PUT api//5 125 | [HttpPut("{id}")] 126 | [Authorize(Policy = PolicyNames.EditModule)] 127 | public Models.SyncfusionHelpDeskTickets Put( 128 | int id, 129 | [FromBody] Models.SyncfusionHelpDeskTickets 130 | updatedSyncfusionHelpDeskTickets) 131 | { 132 | if (ModelState.IsValid && 133 | updatedSyncfusionHelpDeskTickets.ModuleId == _entityId) 134 | { 135 | updatedSyncfusionHelpDeskTickets = 136 | _HelpDeskRepository.UpdateSyncfusionHelpDeskTickets( 137 | "Admin", 138 | updatedSyncfusionHelpDeskTickets); 139 | 140 | _logger.Log(LogLevel.Information, this, LogFunction.Update, 141 | "HelpDesk Updated {updatedSyncfusionHelpDeskTickets}", 142 | updatedSyncfusionHelpDeskTickets); 143 | } 144 | 145 | return updatedSyncfusionHelpDeskTickets; 146 | } 147 | 148 | // DELETE api//5 149 | [HttpDelete("{id}")] 150 | [Authorize(Policy = PolicyNames.EditModule)] 151 | public void Delete(int id) 152 | { 153 | Models.SyncfusionHelpDeskTickets deletedSyncfusionHelpDeskTickets = 154 | _HelpDeskRepository.GetSyncfusionHelpDeskTicket(id); 155 | if (deletedSyncfusionHelpDeskTickets != null && 156 | deletedSyncfusionHelpDeskTickets.ModuleId == _entityId) 157 | { 158 | _HelpDeskRepository.DeleteSyncfusionHelpDeskTickets(id); 159 | _logger.Log(LogLevel.Information, this, LogFunction.Delete, 160 | "HelpDesk Deleted {HelpDeskId}", id); 161 | } 162 | } 163 | } 164 | 165 | // From: https://bit.ly/30ypMCp 166 | public static class IQueryableExtensions 167 | { 168 | public static IOrderedQueryable OrderBy( 169 | this IQueryable source, string propertyName) 170 | { 171 | return source.OrderBy(ToLambda(propertyName)); 172 | } 173 | 174 | public static IOrderedQueryable OrderByDescending( 175 | this IQueryable source, string propertyName) 176 | { 177 | return source.OrderByDescending(ToLambda(propertyName)); 178 | } 179 | 180 | private static Expression> ToLambda( 181 | string propertyName) 182 | { 183 | var parameter = Expression.Parameter(typeof(T)); 184 | var property = Expression.Property(parameter, propertyName); 185 | var propAsObject = Expression.Convert(property, typeof(object)); 186 | 187 | return Expression.Lambda>(propAsObject, parameter); 188 | } 189 | } 190 | } -------------------------------------------------------------------------------- /Server/Controllers/HelpDeskController.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Mvc; 2 | using Microsoft.AspNetCore.Authorization; 3 | using System.Collections.Generic; 4 | using Microsoft.AspNetCore.Http; 5 | using Oqtane.Shared; 6 | using Oqtane.Enums; 7 | using Oqtane.Infrastructure; 8 | using Syncfusion.Helpdesk.Models; 9 | using Syncfusion.Helpdesk.Repository; 10 | using System.Linq; 11 | using System.Threading.Tasks; 12 | using Oqtane.Repository; 13 | 14 | namespace Syncfusion.Helpdesk.Controllers 15 | { 16 | [Route(ControllerRoutes.Default)] 17 | public class HelpdeskController : Controller 18 | { 19 | private readonly IHelpdeskRepository _HelpDeskRepository; 20 | private readonly IUserRepository _users; 21 | private readonly ILogManager _logger; 22 | protected int _entityId = -1; 23 | 24 | public HelpdeskController( 25 | IHelpdeskRepository HelpDeskRepository, 26 | IUserRepository users, 27 | ILogManager logger, 28 | IHttpContextAccessor accessor) 29 | { 30 | _HelpDeskRepository = HelpDeskRepository; 31 | _users = users; 32 | _logger = logger; 33 | 34 | if (accessor.HttpContext.Request.Query.ContainsKey("entityid")) 35 | { 36 | _entityId = int.Parse( 37 | accessor.HttpContext.Request.Query["entityid"]); 38 | } 39 | } 40 | 41 | // A non-Administrator can only query their Tickets 42 | // GET: api/?username=x&entityid=y 43 | [HttpGet] 44 | [Authorize(Policy = PolicyNames.ViewModule)] 45 | public IEnumerable Get( 46 | string username, string entityid) 47 | { 48 | // Get User 49 | var User = _users.GetUser(this.User.Identity.Name); 50 | 51 | if (User.Username.ToLower() != username.ToLower()) 52 | { 53 | return null; 54 | } 55 | 56 | var HelpDeskTickets = 57 | _HelpDeskRepository.GetSyncfusionHelpDeskTickets( 58 | int.Parse(entityid)) 59 | .Where(x => x.CreatedBy == username) 60 | .OrderBy(x => x.HelpDeskTicketId) 61 | .ToList(); 62 | 63 | return HelpDeskTickets; 64 | } 65 | 66 | // A non-Administrator can only get a Ticket they created 67 | // GET: api//1?username=y&entityid=z 68 | [HttpGet("{HelpDeskTicketId}")] 69 | [Authorize(Policy = PolicyNames.ViewModule)] 70 | public SyncfusionHelpDeskTickets Get( 71 | string HelpDeskTicketId, string username, string entityid) 72 | { 73 | // Get User 74 | var User = _users.GetUser(this.User.Identity.Name); 75 | 76 | if (User.Username.ToLower() != username.ToLower()) 77 | { 78 | return null; 79 | } 80 | 81 | var HelpDeskTicket = 82 | _HelpDeskRepository.GetSyncfusionHelpDeskTicket( 83 | int.Parse(HelpDeskTicketId)); 84 | 85 | if (HelpDeskTicket.CreatedBy != User.Username) 86 | { 87 | return null; 88 | } 89 | 90 | return HelpDeskTicket; 91 | } 92 | 93 | // All users can Post 94 | // POST api/ 95 | [HttpPost] 96 | [Authorize(Policy = PolicyNames.ViewModule)] 97 | public Task Post( 98 | [FromBody] Models.SyncfusionHelpDeskTickets SyncfusionHelpDeskTickets) 99 | { 100 | if (ModelState.IsValid 101 | && SyncfusionHelpDeskTickets.ModuleId == _entityId) 102 | { 103 | // Add a new Help Desk Ticket 104 | SyncfusionHelpDeskTickets = 105 | _HelpDeskRepository.AddSyncfusionHelpDeskTickets( 106 | SyncfusionHelpDeskTickets); 107 | 108 | _logger.Log(LogLevel.Information, this, LogFunction.Create, 109 | "HelpDesk Added {newSyncfusionHelpDeskTickets}", 110 | SyncfusionHelpDeskTickets); 111 | } 112 | 113 | return Task.FromResult(SyncfusionHelpDeskTickets); 114 | } 115 | 116 | // Only users who created Ticket 117 | // can call this method to update Ticket 118 | // POST api//1 119 | [HttpPost("{Id}")] 120 | [Authorize(Policy = PolicyNames.ViewModule)] 121 | public void Post( 122 | int Id, 123 | [FromBody] Models.SyncfusionHelpDeskTickets UpdateSyncfusionHelpDeskTicket) 124 | { 125 | // Get User 126 | var User = _users.GetUser(this.User.Identity.Name); 127 | 128 | if (User != null) 129 | { 130 | // Ensure logged in user is the creator 131 | if (UpdateSyncfusionHelpDeskTicket.CreatedBy.ToLower() == User.Username.ToLower()) 132 | { 133 | // Update Ticket 134 | _HelpDeskRepository.UpdateSyncfusionHelpDeskTickets( 135 | "User", 136 | UpdateSyncfusionHelpDeskTicket); 137 | } 138 | } 139 | } 140 | } 141 | } -------------------------------------------------------------------------------- /Server/Manager/HelpDeskManager.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using System.Text.Json; 4 | using Oqtane.Modules; 5 | using Oqtane.Models; 6 | using Oqtane.Infrastructure; 7 | using Oqtane.Repository; 8 | using Syncfusion.Helpdesk.Models; 9 | using Syncfusion.Helpdesk.Repository; 10 | 11 | namespace Syncfusion.Helpdesk.Manager 12 | { 13 | public class HelpdeskManager : IInstallable, IPortable 14 | { 15 | private IHelpdeskRepository _HelpDeskRepository; 16 | private ISqlRepository _sql; 17 | 18 | public HelpdeskManager( 19 | IHelpdeskRepository HelpDeskRepository, 20 | ISqlRepository sql) 21 | { 22 | _HelpDeskRepository = HelpDeskRepository; 23 | _sql = sql; 24 | } 25 | 26 | public bool Install(Tenant tenant, string version) 27 | { 28 | return _sql.ExecuteScript( 29 | tenant, 30 | GetType().Assembly, 31 | "Syncfusion.Helpdesk." + version + ".sql"); 32 | } 33 | 34 | public bool Uninstall(Tenant tenant) 35 | { 36 | return _sql.ExecuteScript( 37 | tenant, 38 | GetType().Assembly, 39 | "Syncfusion.Helpdesk.Uninstall.sql"); 40 | } 41 | 42 | public string ExportModule(Module module) 43 | { 44 | string content = ""; 45 | 46 | List HelpDesks = 47 | new List(); 48 | 49 | var AllTickets = _HelpDeskRepository 50 | .GetSyncfusionHelpDeskTickets(module.ModuleId).ToList(); 51 | 52 | foreach (var Ticket in AllTickets) 53 | { 54 | var HelpDeskTicket = _HelpDeskRepository 55 | .GetSyncfusionHelpDeskTicket(Ticket.HelpDeskTicketId); 56 | 57 | HelpDesks.Add(HelpDeskTicket); 58 | } 59 | 60 | if (HelpDesks != null) 61 | { 62 | content = JsonSerializer.Serialize(HelpDesks); 63 | } 64 | return content; 65 | } 66 | 67 | public void ImportModule(Module module, string content, string version) 68 | { 69 | List HelpDesks = null; 70 | if (!string.IsNullOrEmpty(content)) 71 | { 72 | HelpDesks = 73 | JsonSerializer 74 | .Deserialize>(content); 75 | } 76 | if (HelpDesks != null) 77 | { 78 | foreach (var HelpDesk in HelpDesks) 79 | { 80 | Models.SyncfusionHelpDeskTickets NewHelpDesk = 81 | new SyncfusionHelpDeskTickets(); 82 | 83 | NewHelpDesk.ModuleId = module.ModuleId; 84 | NewHelpDesk.TicketDate = HelpDesk.TicketDate; 85 | NewHelpDesk.TicketStatus = HelpDesk.TicketStatus; 86 | NewHelpDesk.TicketDescription = HelpDesk.TicketDescription; 87 | 88 | NewHelpDesk.SyncfusionHelpDeskTicketDetails = 89 | new List(); 90 | 91 | foreach (var TicketDetail in 92 | HelpDesk.SyncfusionHelpDeskTicketDetails) 93 | { 94 | SyncfusionHelpDeskTicketDetails NewDetail = 95 | new SyncfusionHelpDeskTicketDetails(); 96 | 97 | NewDetail.TicketDetailDate = TicketDetail.TicketDetailDate; 98 | NewDetail.ModifiedBy = TicketDetail.ModifiedBy; 99 | NewDetail.ModifiedOn = TicketDetail.ModifiedOn; 100 | NewDetail.TicketDescription = TicketDetail.TicketDescription; 101 | 102 | NewHelpDesk.SyncfusionHelpDeskTicketDetails.Add(NewDetail); 103 | } 104 | 105 | _HelpDeskRepository.AddSyncfusionHelpDeskTickets(NewHelpDesk); 106 | } 107 | } 108 | } 109 | 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /Server/Repository/HelpDeskContext.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.EntityFrameworkCore; 2 | using Microsoft.AspNetCore.Http; 3 | using Oqtane.Modules; 4 | using Oqtane.Repository; 5 | using Syncfusion.Helpdesk.Models; 6 | using Oqtane.Repository.Databases.Interfaces; 7 | 8 | namespace Syncfusion.Helpdesk.Repository 9 | { 10 | public class HelpdeskContext :DBContextBase, ITransientService, IMultiDatabase 11 | { 12 | public virtual 13 | DbSet 14 | SyncfusionHelpDeskTickets 15 | { get; set; } 16 | 17 | public virtual 18 | DbSet 19 | SyncfusionHelpDeskTicketDetails 20 | { get; set; } 21 | 22 | public HelpdeskContext(IDBContextDependencies DBContextDependencies) : base(DBContextDependencies) 23 | { 24 | // ContextBase handles multi-tenant database connections 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /Server/Repository/HelpDeskRepository.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.EntityFrameworkCore; 2 | using System.Linq; 3 | using System.Collections.Generic; 4 | using Oqtane.Modules; 5 | using Syncfusion.Helpdesk.Models; 6 | using System; 7 | 8 | namespace Syncfusion.Helpdesk.Repository 9 | { 10 | public class HelpdeskRepository : IHelpdeskRepository, IService 11 | { 12 | private readonly HelpdeskContext _db; 13 | 14 | public HelpdeskRepository(HelpdeskContext context) 15 | { 16 | _db = context; 17 | } 18 | 19 | public IQueryable 20 | GetSyncfusionHelpDeskTickets(int ModuleId) 21 | { 22 | return _db.SyncfusionHelpDeskTickets.Where( 23 | item => item.ModuleId == ModuleId); 24 | } 25 | 26 | public Models.SyncfusionHelpDeskTickets GetSyncfusionHelpDeskTicket(int Id) 27 | { 28 | var HelpDeskTicket = _db.SyncfusionHelpDeskTickets 29 | .Where(item => item.HelpDeskTicketId == Id) 30 | .Include(x => x.SyncfusionHelpDeskTicketDetails).FirstOrDefault(); 31 | 32 | // Strip out HelpDeskTicket from SyncfusionHelpDeskTicketDetails 33 | // to avoid trying to return self referencing object 34 | 35 | var objDeskTicket = new SyncfusionHelpDeskTickets(); 36 | 37 | objDeskTicket.HelpDeskTicketId = HelpDeskTicket.HelpDeskTicketId; 38 | objDeskTicket.ModuleId = HelpDeskTicket.ModuleId; 39 | objDeskTicket.TicketDate = HelpDeskTicket.TicketDate; 40 | objDeskTicket.TicketDescription = HelpDeskTicket.TicketDescription; 41 | objDeskTicket.TicketStatus = HelpDeskTicket.TicketStatus; 42 | objDeskTicket.CreatedBy = HelpDeskTicket.CreatedBy; 43 | objDeskTicket.CreatedOn = HelpDeskTicket.CreatedOn; 44 | objDeskTicket.ModifiedBy = HelpDeskTicket.ModifiedBy; 45 | objDeskTicket.ModifiedOn = HelpDeskTicket.ModifiedOn; 46 | 47 | objDeskTicket.SyncfusionHelpDeskTicketDetails = 48 | new List(); 49 | 50 | foreach (var item in HelpDeskTicket.SyncfusionHelpDeskTicketDetails) 51 | { 52 | item.HelpDeskTicket = null; 53 | objDeskTicket.SyncfusionHelpDeskTicketDetails.Add(item); 54 | } 55 | 56 | return objDeskTicket; 57 | } 58 | 59 | public Models.SyncfusionHelpDeskTickets AddSyncfusionHelpDeskTickets 60 | (Models.SyncfusionHelpDeskTickets SyncfusionHelpDeskTicket) 61 | { 62 | _db.SyncfusionHelpDeskTickets.Add(SyncfusionHelpDeskTicket); 63 | _db.SaveChanges(); 64 | return SyncfusionHelpDeskTicket; 65 | } 66 | 67 | public Models.SyncfusionHelpDeskTickets UpdateSyncfusionHelpDeskTickets( 68 | string UpdateMode, 69 | Models.SyncfusionHelpDeskTickets UpdatedSyncfusionHelpDeskTickets) 70 | { 71 | // Get the existing record 72 | var ExistingTicket = 73 | _db.SyncfusionHelpDeskTickets 74 | .Where(x => x.HelpDeskTicketId == 75 | UpdatedSyncfusionHelpDeskTickets.HelpDeskTicketId) 76 | .FirstOrDefault(); 77 | 78 | if (ExistingTicket != null) 79 | { 80 | if (UpdateMode == "Admin") 81 | { 82 | // Only Admin can update these fields 83 | 84 | ExistingTicket.TicketDate = 85 | UpdatedSyncfusionHelpDeskTickets.TicketDate; 86 | 87 | ExistingTicket.TicketDescription = 88 | UpdatedSyncfusionHelpDeskTickets.TicketDescription; 89 | } 90 | 91 | ExistingTicket.TicketStatus = 92 | UpdatedSyncfusionHelpDeskTickets.TicketStatus; 93 | 94 | // Insert any new TicketDetails 95 | 96 | if (UpdatedSyncfusionHelpDeskTickets 97 | .SyncfusionHelpDeskTicketDetails 98 | != null) 99 | { 100 | foreach (var item in 101 | UpdatedSyncfusionHelpDeskTickets 102 | .SyncfusionHelpDeskTicketDetails) 103 | { 104 | if (item.HelpDeskTicketDetailId == 0) 105 | { 106 | // Create New HelpDeskTicketDetails record 107 | SyncfusionHelpDeskTicketDetails newHelpDeskTicketDetails = 108 | new SyncfusionHelpDeskTicketDetails(); 109 | 110 | newHelpDeskTicketDetails.HelpDeskTicketId = 111 | UpdatedSyncfusionHelpDeskTickets.HelpDeskTicketId; 112 | 113 | newHelpDeskTicketDetails.TicketDetailDate = 114 | DateTime.Now; 115 | 116 | newHelpDeskTicketDetails.TicketDescription = 117 | item.TicketDescription; 118 | 119 | _db.SyncfusionHelpDeskTicketDetails 120 | .Add(newHelpDeskTicketDetails); 121 | 122 | _db.SaveChanges(); 123 | } 124 | } 125 | } 126 | 127 | _db.Entry(ExistingTicket).State = EntityState.Modified; 128 | _db.SaveChanges(); 129 | } 130 | 131 | return ExistingTicket; 132 | } 133 | 134 | public void DeleteSyncfusionHelpDeskTickets(int Id) 135 | { 136 | Models.SyncfusionHelpDeskTickets SyncfusionHelpDeskTicket = 137 | _db.SyncfusionHelpDeskTickets.Find(Id); 138 | 139 | _db.SyncfusionHelpDeskTickets.Remove(SyncfusionHelpDeskTicket); 140 | _db.SaveChanges(); 141 | } 142 | 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /Server/Repository/IHelpDeskRepository.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using Syncfusion.Helpdesk.Models; 4 | 5 | namespace Syncfusion.Helpdesk.Repository 6 | { 7 | public interface IHelpdeskRepository 8 | { 9 | IQueryable 10 | GetSyncfusionHelpDeskTickets(int ModuleId); 11 | 12 | Models.SyncfusionHelpDeskTickets 13 | GetSyncfusionHelpDeskTicket(int Id); 14 | 15 | Models.SyncfusionHelpDeskTickets 16 | AddSyncfusionHelpDeskTickets( 17 | Models.SyncfusionHelpDeskTickets SyncfusionHelpDeskTicket); 18 | 19 | Models.SyncfusionHelpDeskTickets 20 | UpdateSyncfusionHelpDeskTickets( 21 | string UpdateMode, 22 | Models.SyncfusionHelpDeskTickets SyncfusionHelpDeskTicket); 23 | 24 | void DeleteSyncfusionHelpDeskTickets(int Id); 25 | } 26 | } -------------------------------------------------------------------------------- /Server/Scripts/Syncfusion.HelpDesk.1.0.0.sql: -------------------------------------------------------------------------------- 1 | /* 2 | Create SyncfusionHelpdesk table 3 | */ 4 | 5 | CREATE TABLE [dbo].[SyncfusionHelpdesk]( 6 | [HelpdeskId] [int] IDENTITY(1,1) NOT NULL, 7 | [ModuleId] [int] NOT NULL, 8 | [Name] [nvarchar](256) NOT NULL, 9 | [CreatedBy] [nvarchar](256) NOT NULL, 10 | [CreatedOn] [datetime] NOT NULL, 11 | [ModifiedBy] [nvarchar](256) NOT NULL, 12 | [ModifiedOn] [datetime] NOT NULL, 13 | CONSTRAINT [PK_SyncfusionHelpdesk] PRIMARY KEY CLUSTERED 14 | ( 15 | [HelpdeskId] ASC 16 | ) 17 | ) 18 | GO 19 | 20 | /* 21 | Create foreign key relationships 22 | */ 23 | ALTER TABLE [dbo].[SyncfusionHelpdesk] WITH CHECK ADD CONSTRAINT [FK_SyncfusionHelpdesk_Module] FOREIGN KEY([ModuleId]) 24 | REFERENCES [dbo].Module ([ModuleId]) 25 | ON DELETE CASCADE 26 | GO -------------------------------------------------------------------------------- /Server/Scripts/Syncfusion.HelpDesk.Uninstall.sql: -------------------------------------------------------------------------------- 1 | /* 2 | Remove SyncfusionHelpdesk table 3 | */ 4 | 5 | DROP TABLE [dbo].[SyncfusionHelpdesk] 6 | GO 7 | DROP TABLE [dbo].[SyncfusionHelpDeskTicketDetails] 8 | GO 9 | DROP TABLE [dbo].[SyncfusionHelpDeskTickets] 10 | GO -------------------------------------------------------------------------------- /Server/Scripts/Syncfusion.Helpdesk.1.0.1.sql: -------------------------------------------------------------------------------- 1 | /* 2 | Create SyncfusionHelpDesk tables 3 | */ 4 | 5 | SET ANSI_NULLS ON 6 | GO 7 | SET QUOTED_IDENTIFIER ON 8 | GO 9 | CREATE TABLE [dbo].[SyncfusionHelpDeskTicketDetails]( 10 | [HelpDeskTicketDetailId] [int] IDENTITY(1,1) NOT NULL, 11 | [HelpDeskTicketId] [int] NOT NULL, 12 | [TicketDetailDate] [datetime] NOT NULL, 13 | [TicketDescription] [nvarchar](max) NOT NULL, 14 | [CreatedBy] [nvarchar](256) NOT NULL, 15 | [CreatedOn] [datetime] NOT NULL, 16 | [ModifiedBy] [nvarchar](256) NOT NULL, 17 | [ModifiedOn] [datetime] NOT NULL, 18 | CONSTRAINT [PK_SyncfusionHelpDeskTicketDetails] PRIMARY KEY CLUSTERED 19 | ( 20 | [HelpDeskTicketDetailId] ASC 21 | )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 22 | ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 23 | GO 24 | 25 | SET ANSI_NULLS ON 26 | GO 27 | SET QUOTED_IDENTIFIER ON 28 | GO 29 | CREATE TABLE [dbo].[SyncfusionHelpDeskTickets]( 30 | [HelpDeskTicketId] [int] IDENTITY(1,1) NOT NULL, 31 | [ModuleId] [int] NOT NULL, 32 | [TicketStatus] [nvarchar](50) NOT NULL, 33 | [TicketDate] [datetime] NOT NULL, 34 | [TicketDescription] [nvarchar](max) NOT NULL, 35 | [CreatedBy] [nvarchar](256) NOT NULL, 36 | [CreatedOn] [datetime] NOT NULL, 37 | [ModifiedBy] [nvarchar](256) NOT NULL, 38 | [ModifiedOn] [datetime] NOT NULL, 39 | CONSTRAINT [PK_HelpDeskTickets] PRIMARY KEY CLUSTERED 40 | ( 41 | [HelpDeskTicketId] ASC 42 | )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 43 | ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 44 | GO 45 | ALTER TABLE [dbo].[SyncfusionHelpDeskTicketDetails] WITH CHECK ADD CONSTRAINT [FK_SyncfusionHelpDeskTicketDetails_SyncfusionHelpDeskTickets] FOREIGN KEY([HelpDeskTicketId]) 46 | REFERENCES [dbo].[SyncfusionHelpDeskTickets] ([HelpDeskTicketId]) 47 | ON DELETE CASCADE 48 | GO 49 | ALTER TABLE [dbo].[SyncfusionHelpDeskTicketDetails] CHECK CONSTRAINT [FK_SyncfusionHelpDeskTicketDetails_SyncfusionHelpDeskTickets] 50 | GO 51 | 52 | /* 53 | Create foreign key relationships 54 | */ 55 | 56 | ALTER TABLE [dbo].[SyncfusionHelpDeskTickets] WITH CHECK ADD CONSTRAINT [FK_SyncfusionHelpDeskTickets_Module] FOREIGN KEY([ModuleId]) 57 | REFERENCES [dbo].[Module] ([ModuleId]) 58 | ON DELETE CASCADE 59 | GO 60 | 61 | ALTER TABLE [dbo].[SyncfusionHelpDeskTickets] CHECK CONSTRAINT [FK_SyncfusionHelpDeskTickets_Module] 62 | GO -------------------------------------------------------------------------------- /Server/Startup/ServerStartup.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Builder; 2 | using Microsoft.AspNetCore.Hosting; 3 | using Microsoft.Extensions.DependencyInjection; 4 | using Oqtane.Infrastructure; 5 | using Syncfusion.Blazor; 6 | using Microsoft.Extensions.Configuration; 7 | namespace Syncfusion.Helpdesk.Server.Startup 8 | { 9 | public class ServerStartup : IServerStartup 10 | { 11 | public void ConfigureServices(IServiceCollection services) 12 | { 13 | services.AddSyncfusionBlazor(); 14 | } 15 | public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 16 | { 17 | // Register Syncfusion license 18 | // Get a free license here: 19 | // https://www.syncfusion.com/products/communitylicense 20 | var builder = new ConfigurationBuilder() 21 | .SetBasePath(env.ContentRootPath) 22 | .AddJsonFile("appsettings.json", optional: false, 23 | reloadOnChange: true); 24 | var Configuration = builder.Build(); 25 | var SyncfusionLicense = Configuration.GetSection("SyncfusionLicense"); 26 | if (SyncfusionLicense != null) 27 | { 28 | Syncfusion.Licensing.SyncfusionLicenseProvider 29 | .RegisterLicense(SyncfusionLicense.Value); 30 | } 31 | } 32 | 33 | public void ConfigureMvc(IMvcBuilder mvcBuilder) 34 | { 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /Server/Syncfusion.HelpDesk.Server.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net8.0 5 | true 6 | 1.0.0 7 | Syncfusion.Helpdesk 8 | Syncfusion 9 | Syncfusion 10 | Helpdesk 11 | Syncfusion 12 | Syncfusion.Helpdesk.Server.Oqtane 13 | true 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /Server/wwwroot/Modules/Syncfusion.HelpDesk/Module.css: -------------------------------------------------------------------------------- 1 | /* Module Custom Styles */ -------------------------------------------------------------------------------- /Server/wwwroot/Modules/Syncfusion.HelpDesk/Module.js: -------------------------------------------------------------------------------- 1 | /* Module Script */ 2 | var Syncfusion = Syncfusion || {}; 3 | 4 | Syncfusion.Helpdesk = { 5 | }; -------------------------------------------------------------------------------- /Server/wwwroot/_content/Placeholder.txt: -------------------------------------------------------------------------------- 1 | The _content folder should only contain static resources from shared razor component libraries (RCLs). Static resources can be extracted from shared RCL Nuget packages by executing a Publish task on the module's Server project to a local folder and copying the files from the _content folder which is created. Each shared RCL would have its own appropriately named subfolder within the module's _content folder. 2 | 3 | ie. 4 | 5 | /_content 6 | /Radzen.Blazor 7 | /css 8 | /fonts 9 | /syncfusion.blazor 10 | /scripts 11 | /styles 12 | -------------------------------------------------------------------------------- /Server/wwwroot/_content/syncfusion.blazor/scripts/0.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[0],{"./modules/sf-import.js":function(o,s){window.sfBlazor=window.sfBlazor||{},window.sfBlazor.import=function(o){return"string"==typeof o&&o.startsWith("./")&&(o=document.baseURI+o.substr(2)),import(o)}}}]); -------------------------------------------------------------------------------- /Server/wwwroot/_content/syncfusion.blazor/scripts/1.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[1],{"./modules/sf-import-ie.js":function(o,n){window.sfBlazor=window.sfBlazor||{},window.sfBlazor.import=function(o){"string"==typeof o&&o.startsWith("./")&&(o=document.baseURI+o.substr(2)),new Promise((function(n,s){var t=document.createElement("script");t.src=o,t.async=!0,t.onload=function(){n(t)},t.onerror=function(){s(t)},document.body.appendChild(t)}))}}}]); -------------------------------------------------------------------------------- /Server/wwwroot/_content/syncfusion.blazor/scripts/button-ddeaa8.min.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function s(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,s),i.l=!0,i.exports}s.m=e,s.c=t,s.d=function(e,t,n){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(s.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)s.d(n,i,function(t){return e[t]}.bind(null,i));return n},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="_content/Syncfusion.Blazor/scripts/",s(s.s="./bundles/button.js")}({"./bundles/button.js":function(e,t,s){"use strict";s.r(t);s("./modules/button.js")},"./modules/button.js":function(e,t){function s(e){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}window.sf=window.sf||{};sf.buttons=sf.base.extend({},sf.buttons,function(e){"use strict";var t,n=(t=function(e,s){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var s in t)t.hasOwnProperty(s)&&(e[s]=t[s])})(e,s)},function(e,s){function n(){this.constructor=e}t(e,s),e.prototype=null===s?Object.create(s):(n.prototype=s.prototype,new n)}),i=function(e,t,n,i){var o,r=arguments.length,a=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"===("undefined"==typeof Reflect?"undefined":s(Reflect))&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var l=e.length-1;l>=0;l--)(o=e[l])&&(a=(r<3?o(a):r>3?o(t,n,a):o(t,n))||a);return r>3&&a&&Object.defineProperty(t,n,a),a},o=new sf.base.Observer,r="e-rtl",a="e-btn",l="e-primary",c="e-icon-btn",f=function(e){function t(t,s){return e.call(this,t,s)||this}return n(t,e),t.prototype.preRender=function(){},t.prototype.render=function(){this.initialize(),this.removeRippleEffect=sf.base.rippleEffect(this.element,{selector:"."+a}),this.renderComplete()},t.prototype.initialize=function(){if(this.cssClass&&sf.base.addClass([this.element],this.cssClass.split(" ")),this.isPrimary&&this.element.classList.add(l),!sf.base.isBlazor()||sf.base.isBlazor()&&"progress-btn"!==this.getModuleName()){if(this.content){var e=this.enableHtmlSanitizer?sf.base.SanitizeHtmlHelper.sanitize(this.content):this.content;this.element.innerHTML=e}this.setIconCss()}this.enableRtl&&this.element.classList.add(r),this.disabled?this.controlStatus(this.disabled):this.wireEvents()},t.prototype.controlStatus=function(e){this.element.disabled=e},t.prototype.setIconCss=function(){if(this.iconCss){var e=this.createElement("span",{className:"e-btn-icon "+this.iconCss});this.element.textContent.trim()?(e.classList.add("e-icon-"+this.iconPosition.toLowerCase()),"Top"!==this.iconPosition&&"Bottom"!==this.iconPosition||this.element.classList.add("e-"+this.iconPosition.toLowerCase()+"-icon-btn")):this.element.classList.add(c);var t=this.element.childNodes[0];!t||"Left"!==this.iconPosition&&"Top"!==this.iconPosition?this.element.appendChild(e):this.element.insertBefore(e,t)}},t.prototype.wireEvents=function(){this.isToggle&&sf.base.EventHandler.add(this.element,"click",this.btnClickHandler,this)},t.prototype.unWireEvents=function(){this.isToggle&&sf.base.EventHandler.remove(this.element,"click",this.btnClickHandler)},t.prototype.btnClickHandler=function(){this.element.classList.contains("e-active")?this.element.classList.remove("e-active"):this.element.classList.add("e-active")},t.prototype.destroy=function(){var t=[l,r,c,"e-success","e-info","e-danger","e-warning","e-flat","e-outline","e-small","e-bigger","e-active","e-round","e-top-icon-btn","e-bottom-icon-btn"];this.cssClass&&(t=t.concat(this.cssClass.split(" "))),e.prototype.destroy.call(this),sf.base.removeClass([this.element],t),this.element.getAttribute("class")||this.element.removeAttribute("class"),this.disabled&&this.element.removeAttribute("disabled"),this.content&&(this.element.innerHTML=this.element.innerHTML.replace(this.content,""));var s=this.element.querySelector("span.e-btn-icon");s&&sf.base.detach(s),this.unWireEvents(),sf.base.isRippleEnabled&&this.removeRippleEffect()},t.prototype.getModuleName=function(){return"btn"},t.prototype.getPersistData=function(){return this.addOnPersist([])},t.Inject=function(){},t.prototype.onPropertyChanged=function(e,t){for(var s=this.element.querySelector("span.e-btn-icon"),n=0,i=Object.keys(e);n0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]2&&(l.stringSize-=.2,this.checkOverlapTextPosition(e,l.stringSize,n,r,i,o,a,l)),l.stringSize},triggerDownload:function(e,t,n){var r=document.createElement("a");r.download=t+"."+e.toLocaleLowerCase(),r.href=n,r.click()},exportAsImage:function(n,r,i,o){return e(this,void 0,void 0,(function(){var e;return t(this,(function(t){switch(t.label){case 0:return[4,this.imageExport(n,r,i,o)];case 1:return(e=t.sent())instanceof Promise?(e.then((function(e){return e})),[2,e]):[2,e]}}))}))},imageExport:function(n,r,i,o){return e(this,void 0,void 0,(function(){var e;return t(this,(function(t){return e=this,[2,new Promise((function(t,a){var l=""+i.children[0].outerHTML+"",s=window.URL.createObjectURL(new Blob("SVG"===n?[l]:[(new window.XMLSerializer).serializeToString(i)],{type:"image/svg+xml"}));if("SVG"===n)e.triggerDownload(n,r,s),t(null);else{var u=document.createElement("canvas");u.height=i.clientHeight,u.width=i.clientWidth;var c=u.getContext("2d"),d=new Image;d.onload=function(){if(c.drawImage(d,0,0),window.URL.revokeObjectURL(s),o){var i="JPEG"===n?u.toDataURL("image/jpeg"):"PNG"===n?u.toDataURL("image/png"):"";t(i)}else e.triggerDownload(n,r,u.toDataURL("image/png").replace("image/png","image/octet-stream")),t(null)},d.src=s}}))]}))}))}}}()}}); -------------------------------------------------------------------------------- /Server/wwwroot/_content/syncfusion.blazor/scripts/sf-bullet-chart-ddeaa8.min.js: -------------------------------------------------------------------------------- 1 | !function(t){var e={};function n(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(i,o,function(e){return t[e]}.bind(null,o));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="_content/Syncfusion.Blazor/scripts/",n(n.s="./bundles/sf-bullet-chart.js")}({"./bundles/sf-bullet-chart.js":function(t,e,n){"use strict";n.r(e);n("./modules/sf-bullet-chart.js")},"./modules/sf-bullet-chart.js":function(t,e){window.sfBlazor=window.sfBlazor||{},window.sfBlazor.BulletChart=function(){"use strict";var t=function(){function t(t,e){this.resizeTo=0,this.element=t,this.dotNetRef=e,this.element.blazor__instance=this}return t.prototype.wireEvents=function(){sf.base.EventHandler.add(this.element,"click",this.click.bind(this),this),sf.base.EventHandler.add(this.element,"mousemove",this.mousemove.bind(this),this),window.addEventListener(sf.base.Browser.isTouch&&"orientation"in window&&"onorientationchange"in window?"orientationchange":"resize",this.resize.bind(this))},t.prototype.unWireEvents=function(){sf.base.EventHandler.remove(this.element,"mousemove",this.mousemove),sf.base.EventHandler.remove(this.element,"click",this.click),window.removeEventListener(sf.base.Browser.isTouch&&"orientation"in window&&"onorientationchange"in window?"orientationchange":"resize",this.resize.bind(this)),this.element=null,this.dotNetRef=null},t.prototype.resize=function(){var t=this;this.dotNetRef&&(this.resizeTo&&clearTimeout(this.resizeTo),this.resizeTo=window.setTimeout((function(){t.dotNetRef.invokeMethodAsync("TriggerResize")}),500))},t.prototype.click=function(t){this.dotNetRef&&this.dotNetRef.invokeMethodAsync("TriggerClick",t.target.id)},t.prototype.mousemove=function(t){var e,n;this.element&&(e=this.element.getBoundingClientRect());var i=document.getElementById(this.element.id+"_svg");i&&(n=i.getBoundingClientRect());var o=t.clientX-e.left-Math.max(n.left-e.left,0),r=t.clientY-e.top-Math.max(n.top-e.top,0);this.dotNetRef&&this.dotNetRef.invokeMethodAsync("TriggerMouseMove",t.target.id,o,r)},t.prototype.valueBarAnimation=function(t,e,n){new sf.base.Animation({}).animate(e,{duration:t.duration,delay:t.delay,progress:function(i){if(i.timeStamp>=i.delay){e.style.visibility="visible";var o=-1*Math.cos((i.timeStamp-i.delay)/i.duration*(Math.PI/2))+1;e.setAttribute("transform","translate("+n.toString()+" "+t.valueY.toString()+") scale("+(o/1).toString()+", 1) translate("+-n.toString()+" "+-t.valueY.toString()+")")}},end:function(){e.setAttribute("transform","translate(0,0)"),e.style.visibility="visible"}})},t.prototype.targetBarAnimation=function(t,e,n,i){new sf.base.Animation({}).animate(e,{duration:t.duration,delay:t.delay,progress:function(t){if(t.timeStamp>=t.delay){e.style.visibility="visible";var o=-1*Math.cos((t.timeStamp-t.delay)/t.duration*(Math.PI/2))+1;e.setAttribute("transform","translate("+n.toString()+" "+i.toString()+") scale(1, "+(o/1).toString()+") translate("+-n.toString()+" "+-i.toString()+")")}},end:function(){e.setAttribute("transform","translate(0,0)"),e.style.visibility="visible"}})},t}();return{initialize:function(e,n,i,o){if(e)return new t(e,o).wireEvents(),this.getElementSize(e,n,i)},getElementSize:function(t,e,n){var i,o;return t&&(t.style.height=e,t.style.width=n,i=t.clientWidth||t.offsetWidth,o=t.clientHeight),{width:i,height:o}},updateElementOpacity:function(t,e,n){var i=document.getElementById(t);if(i){if(!sf.base.isNullOrUndefined(n)&&""!==n)document.getElementById(n).setAttribute("opacity","1");!0===e?i.setAttribute("opacity","1"):i.setAttribute("opacity","0.6")}},doValueBarAnimation:function(t,e,n,i){for(var o=0;odocument.documentElement.clientHeight&&n-o.height-s.height>document.documentElement.clientTop&&(n=n-o.height-s.height),o.left+s.width>document.documentElement.clientWidth&&o.right-s.width>document.documentElement.clientLeft&&(t=t+o.width-s.width)),this.popup.style.left=Math.ceil(t)+"px",this.popup.style.top=Math.ceil(n)+"px"},t.prototype.mouseDownHandler=function(e){if(this.popup.parentElement){var t=e.target,n=!0;if(!sf.base.Browser.isDevice&&t.classList.contains("e-hsv-model")){var o=t.parentElement.getBoundingClientRect(),s=this.element.getBoundingClientRect();n=e.clientX>=o.left&&e.clientX<=o.right&&e.clientY>=o.top&&e.clientY<=o.bottom||e.clientX>=s.left&&e.clientX<=s.right&&e.clientY>=s.top&&e.clientY<=s.bottom}n&&(sf.base.closest(t,"#"+this.getDropDownButton().id)||sf.base.closest(e.target,"#"+this.popup.id)||sf.base.closest(e.target,".e-colorpicker.e-modal"))||(this.dotNetRef.invokeMethodAsync("BtnClick",null),this.removeEventListener())}else this.removeEventListener()},t.prototype.keydownHandler=function(e){var t=this.getElement();if(e.altKey)38===e.keyCode&&(e.stopPropagation(),e.preventDefault(),this.dotNetRef.invokeMethodAsync("BtnClick",null),t.focus(),this.removeEventListener());else{var n=this.popup.firstElementChild;if(27!==e.keyCode&&9!==e.keyCode||(e.stopPropagation(),this.dotNetRef.invokeMethodAsync("BtnClick",null),27===e.keyCode&&e.preventDefault(),t.focus(),this.removeEventListener()),!n||!n.classList.contains("e-dropdown-menu"))return;if(13===e.keyCode)return e.preventDefault(),void(e.target.classList.contains("e-item")&&e.target.classList.contains("e-focused")?(t.focus(),this.removeEventListener()):e.stopPropagation());38!==e.keyCode&&40!==e.keyCode||(e.target.classList.contains("e-dropdown-menu")&&e.stopPropagation(),e.preventDefault(),sf.splitbuttons.upDownKeyHandler(n,e.keyCode))}},t.prototype.getElement=function(){return this.element.classList.contains("e-split-btn-wrapper")?this.element.firstElementChild:this.element},t.prototype.getDropDownButton=function(){return this.element.classList.contains("e-split-btn-wrapper")?this.element.getElementsByClassName("e-dropdown-btn")[0]:this.element},t.prototype.clickHandler=function(e){sf.base.closest(e.target,".e-item")&&(this.removeEventListener(),this.getElement().focus())},t.prototype.scrollHandler=function(e){if(this.popup&&document.getElementById(this.popup.id)){var t=this.element.parentElement.classList.contains("e-colorpicker-container");this.setPosition(t),t&&this.element.parentElement.blazor__instance.setOffset(this.popup)}else{var n=this.getDropDownButton();n&&document.getElementById(n.id)||sf.base.EventHandler.remove(e.target,"scroll",this.scrollHandler)}},t.prototype.addEventListener=function(t){if(sf.base.EventHandler.add(document,e,this.mouseDownHandler,this),sf.base.EventHandler.add(this.popup,"click",this.clickHandler,this),sf.base.EventHandler.add(this.popup,"keydown",this.keydownHandler,this),t&&this.popup.firstElementChild){var n=this.popup.querySelector(".e-focused");n?n.focus():this.popup.firstElementChild.focus()}},t.prototype.removeEventListener=function(t){if(sf.base.EventHandler.remove(document,e,this.mouseDownHandler),this.popup.parentElement&&(sf.base.EventHandler.remove(this.popup,"click",this.clickHandler),sf.base.EventHandler.remove(this.popup,"keydown",this.keydownHandler),t)){var n=this.getDropDownButton();n&&document.getElementById(n.id)&&(this.addScrollEvents(!1),this.element.appendChild(this.popup))}},t.prototype.addScrollEvents=function(e){for(var t=0,n=sf.popups.getScrollableParent(this.element);t0),u="string"==typeof n?JSON.parse(n):n;i&&!s&&this.updateCellHighlight(n.id);var c=e.blazorInstance;u.content=u.xLabel+u.yLabel+u.value,h&&!sf.base.isNullOrUndefined(c)?(u.content=u.displayText,u.location={x:u.x+u.width/2,y:u.y+u.height/2},u.areaBounds={height:o.height+o.y,width:o.width,x:o.x},c.tooltip=new sf.svgbase.Tooltip(u),c.tooltip.appendTo("#"+t)):sf.base.isNullOrUndefined(c.tooltip)||(sf.base.isNullOrUndefined(l)||(c.tooltip.border.color=a.color||c.tooltip.border.color,c.tooltip.textStyle.color=l.color||c.tooltip.textStyle.color,c.tooltip.textStyle.fontFamily=l.fontFamily||c.tooltip.textStyle.fontFamily,c.tooltip.textStyle.fontStyle=l.fontStyle||c.tooltip.textStyle.fontStyle,c.tooltip.textStyle.fontWeight=l.fontWeight||c.tooltip.textStyle.fontWeight,c.tooltip.textStyle.size=l.size||c.tooltip.textStyle.size),u.toolTipX=u.x+u.width/2,u.toolTipY=u.y+u.height/2,u.content=u.displayText,c.tooltip.location=new sf.svgbase.TooltipLocation(u.toolTipX,u.toolTipY),c.tooltip.content=[u.content],c.tooltip.dataBind())},e.prototype.updateCellHighlight=function(e){this.previousCellID!==e&&(""!=this.previousCellID&&this.setOpacity(document.getElementById(this.previousCellID),"1"),this.setOpacity(document.getElementById(e),"0.65"),this.previousCellID=e)},e.prototype.setOpacity=function(e,t){e.setAttribute("opacity",t)},e.prototype.getElementBounds=function(e){var t=this.stringToNumber(this.width,e.offsetWidth)||e.offsetWidth||600,n=this.stringToNumber(this.height,e.offsetHeight)||450,o=e.getBoundingClientRect();return{width:t,height:n,parentHeight:e.parentElement?e.parentElement.offsetHeight:n,left:Math.ceil(o.left),top:Math.ceil(o.top),right:Math.ceil(o.right),bottom:Math.ceil(o.bottom)}},e.prototype.stringToNumber=function(e,t){return sf.base.isNullOrUndefined(e)?null:-1!==e.indexOf("%")?t/100*parseInt(e,10):parseInt(e,10)},e.prototype.getMaxLabelSize=function(e,t){for(var n={height:0,width:0,top:0,left:0,right:0,bottom:0,parentHeight:0},o=0;o-1)for(var s=0,l=o.length;so){i=!0;break}}var l=this.returnLabels(t[0],t[1],t[2]),a=this.returnLabels(n[0],n[1],n[2]);this.dotnetRef.invokeMethodAsync("LabelInterSect",i,l,a)},e.prototype.returnLabels=function(e,t,n){for(var o=0;on)for(var l=i.length-1;l>=0&&(i=i.substring(0,l)+"...",!((s=this.measureText(i,t).width)<=n));--l);e[o]=i}return e},e.prototype.measureText=function(e,t){var n=document.getElementById("heatmapmeasuretext");return null===n&&(n=sf.base.createElement("text",{id:"heatmapmeasuretext"}),document.body.appendChild(n)),n.setAttribute("style","position:absolute;visibility:hidden;font-size:"+t.size+";font-weight:"+t.fontWeight+";font-style:"+t.fontStyle+";font-family:"+t.fontFamily+";top:-100;left:0;white-space:nowrap;line-height:normal"),n.innerText=e,{height:n.clientHeight,width:n.clientWidth,top:null,left:null,right:null,bottom:null,parentHeight:null}},e.prototype.destroy=function(){var e=sf.base.Browser.isPointer?"pointerleave":"mouseleave";sf.base.EventHandler.remove(this.element,"click",this.heatMapMouseClick),sf.base.EventHandler.remove(this.element,sf.base.Browser.touchStartEvent,this.heatMapMouseMove),sf.base.EventHandler.remove(this.element,e,this.heatMapMouseLeave),sf.base.EventHandler.remove(this.element,sf.base.Browser.touchMoveEvent,this.heatMapMouseMove);var t=sf.base.Browser.isTouch&&"orientation"in window&&"onorientationchange"in window?"orientationchange":"resize";sf.base.EventHandler.remove(window,t,this.resizeBound.bind(this)),this.element=null},e}();return{initialize:function(t,n,o){new e(t,n),t&&t.blazorInstance&&t.blazorInstance.initialize(o)},labelInterSect:function(e,t,n,o,i){e&&e.blazorInstance&&e.blazorInstance.labelInterSect(t,n,o,i)},renderTooltip:function(e,t,n,o,i,s,l,a,r){e&&e.blazorInstance&&e.blazorInstance.renderTooltip(e,t,o,i,s,l,a,r)},fadeOut:function(e){if(e&&e.blazorInstance){if(sf.base.isNullOrUndefined(e.blazorInstance)||!sf.base.isNullOrUndefined(e.blazorInstance)&&sf.base.isNullOrUndefined(e.blazorInstance.tooltip))return;""!=e.blazorInstance.previousCellID&&(e.blazorInstance.setOpacity(document.getElementById(e.blazorInstance.previousCellID),"1"),e.blazorInstance.previousCellID=""),e.blazorInstance.tooltip.fadeOut()}},destroy:function(e){e&&e.blazorInstance&&e.blazorInstance.destroy()}}}()}}); -------------------------------------------------------------------------------- /Server/wwwroot/_content/syncfusion.blazor/scripts/sf-import-ddeaa8.min.js: -------------------------------------------------------------------------------- 1 | !function(t){var e={};function r(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)r.d(n,o,function(e){return t[e]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="_content/Syncfusion.Blazor/scripts/",r(r.s="./bundles/sf-import.js")}({"./bundles/sf-import.js":function(t,e,r){"use strict";r.r(e);r("./modules/sf-import.js")},"./modules/sf-import.js":function(t,e){window.sfBlazor=window.sfBlazor||{},window.sfBlazor.import=function(t){return"string"==typeof t&&t.startsWith("./")&&(t=document.baseURI+t.substr(2)),import(t)}}}); -------------------------------------------------------------------------------- /Server/wwwroot/_content/syncfusion.blazor/scripts/sf-import-ie-ddeaa8.min.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="_content/Syncfusion.Blazor/scripts/",n(n.s="./bundles/sf-import-ie.js")}({"./bundles/sf-import-ie.js":function(e,t,n){"use strict";n.r(t);n("./modules/sf-import-ie.js")},"./modules/sf-import-ie.js":function(e,t){window.sfBlazor=window.sfBlazor||{},window.sfBlazor.import=function(e){"string"==typeof e&&e.startsWith("./")&&(e=document.baseURI+e.substr(2)),new Promise((function(t,n){var r=document.createElement("script");r.src=e,r.async=!0,r.onload=function(){t(r)},r.onerror=function(){n(r)},document.body.appendChild(r)}))}}}); -------------------------------------------------------------------------------- /Server/wwwroot/_content/syncfusion.blazor/scripts/sf-import-script-ddeaa8.min.js: -------------------------------------------------------------------------------- 1 | !function(t){function e(e){for(var r,o,i=e[0],a=e[1],u=0,s=[];u=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var u=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(u&&c){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),j(r),f}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;j(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:_(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},t}(t.exports);try{regeneratorRuntime=n}catch(t){Function("r","regeneratorRuntime = r")(n)}},"./bundles/sf-import-script.js":function(t,e,r){"use strict";r.r(e);r("./modules/sf-import-script.js")},"./modules/sf-import-script.js":function(t,e,r){"use strict";var n,o=r("../node_modules/@babel/runtime/regenerator/index.js"),i=r.n(o);function a(t,e,r,n,o,i,a){try{var u=t[i](a),c=u.value}catch(t){return void r(t)}u.done?e(c):Promise.resolve(c).then(n,o)}(n=i.a.mark((function t(){return i.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!window.MSInputMethodContext||!document.documentMode){t.next=5;break}return t.next=3,r.e(1).then(r.t.bind(null,"./modules/sf-import-ie.js",7));case 3:t.next=7;break;case 5:return t.next=7,r.e(0).then(r.t.bind(null,"./modules/sf-import.js",7));case 7:DotNet.invokeMethodAsync("Syncfusion.Blazor","SetIsDevice",sfBlazor.isDevice());case 8:case"end":return t.stop()}}),t)})),function(){var t=this,e=arguments;return new Promise((function(r,o){var i=n.apply(t,e);function u(t){a(i,r,o,u,c,"next",t)}function c(t){a(i,r,o,u,c,"throw",t)}u(void 0)}))})()}}); -------------------------------------------------------------------------------- /Server/wwwroot/_content/syncfusion.blazor/scripts/sf-inplaceeditor-ddeaa8.min.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function n(o){if(t[o])return t[o].exports;var i=t[o]={i:o,l:!1,exports:{}};return e[o].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(o,i,function(t){return e[t]}.bind(null,i));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="_content/Syncfusion.Blazor/scripts/",n(n.s="./bundles/sf-inplaceeditor.js")}({"./bundles/sf-inplaceeditor.js":function(e,t,n){"use strict";n.r(t);n("./modules/sf-inplaceeditor.js")},"./modules/sf-inplaceeditor.js":function(e,t){window.sfBlazor=window.sfBlazor||{},window.sfBlazor.InPlaceEditor=function(){"use strict";var e="e-inplaceeditor",t=function(){function t(e,t,n){this.submitOnEnter=!0,this.clearComponents=["AutoComplete","Mask","Text"],this.element=e,this.dotNetRef=n,this.updateContext(t),this.element.blazor__instance=this}return t.prototype.updateContext=function(e){sf.base.extend(this,this,e)},t.prototype.initialize=function(){this.onResizeScrollHandler=this.scrollResizeHandler.bind(this),this.wireEvents(),this.id=this.element.id,this.dotNetRef.invokeMethodAsync("Created",null)},t.prototype.wireEvents=function(){sf.base.EventHandler.add(this.element,"keydown",this.valueKeyDownHandler,this),sf.base.EventHandler.add(document,"scroll",this.scrollResizeHandler,this),window.addEventListener("resize",this.onResizeScrollHandler),Array.prototype.indexOf.call(this.clearComponents,this.type)>-1&&sf.base.EventHandler.add(this.element,"mousedown",this.mouseDownHandler,this)},t.prototype.scrollResizeHandler=function(){"Popup"!==this.mode||sf.base.Browser.isDevice||this.dotNetRef.invokeMethodAsync("CancelAction",null)},t.prototype.valueKeyDownHandler=function(t){"Tab"===t.code&&!0===t.shiftKey&&"BUTTON"!==t.target.tagName&&("Submit"===this.actionOnBlur?this.dotNetRef.invokeMethodAsync("SaveAction",null):"Cancel"===this.actionOnBlur&&this.dotNetRef.invokeMethodAsync("CancelAction",null)),"Enter"!==t.code||!t.target.classList.contains(e)||this.element.querySelector("e-editable-value-element").classList.contains("e-editable-open")||this.element.classList.contains("e-disable")||(t.preventDefault(),this.dotNetRef.invokeMethodAsync("RenderEditor",null))},t.prototype.mouseDownHandler=function(e){e.target.classList.contains("e-clear-icon")&&(this.isClearTarget=!0)},t.prototype.openEditor=function(e){if(this.updateContext(e),"Popup"===this.mode&&(this.popupContent=document.querySelector("#"+this.popupElement+"_content")),"Ignore"!==this.actionOnBlur&&sf.base.EventHandler.add(document,"mousedown",this.docClickHandler,this),this.submitOnEnter){var t="Popup"===this.mode?this.popupContent:this.element;sf.base.EventHandler.add(t,"keydown",this.enterKeyDownHandler,this)}},t.prototype.enterKeyDownHandler=function(e){sf.base.closest(e.target,".e-editable-component .e-richtexteditor")||(13===e.keyCode&&13===e.which&&sf.base.closest(e.target,".e-editable-component")?this.dotNetRef.invokeMethodAsync("SaveAction",null):27===e.keyCode&&27===e.which&&this.dotNetRef.invokeMethodAsync("CancelAction",null))},t.prototype.removeEditor=function(e){this.updateContext(e),this.enablePersistence&&window.localStorage.setItem(this.id,this.value),this.unWireEvents(),sf.base.EventHandler.remove(document,"mousedown",this.docClickHandler)},t.prototype.Destroy=function(e){var t=this;for(this.updateContext(e),this.unWireEvents(),sf.base.EventHandler.remove(document,"mousedown",this.docClickHandler),this.enablePersistence&&window.localStorage.setItem(this.id,this.value),"Popup"===this.mode&&this.destroyPopup(),["e-disable","e-rtl"].forEach((function(e){sf.base.removeClass([t.element],[e])}));this.element.firstElementChild;)this.element.removeChild(this.element.firstElementChild)},t.prototype.destroyPopup=function(){var e=document.querySelector("#"+this.popupElement);if(e){for(;e.attributes.length>0;)e.removeAttribute(e.attributes[0].name);for(var t=e.children,n=t.length-1;n>=0;n--)sf.base.detach(t[n])}},t.prototype.unWireEvents=function(){sf.base.EventHandler.remove(document,"scroll",this.scrollResizeHandler),window.removeEventListener("resize",this.onResizeScrollHandler),sf.base.EventHandler.remove(this.element,"keydown",this.valueKeyDownHandler),Array.prototype.indexOf.call(this.clearComponents,this.type)>-1&&sf.base.EventHandler.remove(this.element,"mousedown",this.mouseDownHandler)},t.prototype.validate=function(){return!!this.element.querySelector(".validation-message")},t.prototype.docClickHandler=function(t){var n=sf.base.closest(t.target,"."+e),o=sf.base.closest(t.target,".e-inplaceeditor-tip"),i=sf.base.closest(t.target,".e-editable-elements"),s=sf.base.closest(t.target,".e-rte-elements");if(this.isClearTarget||!sf.base.isNullOrUndefined(n)&&n.isEqualNode(this.element)||!sf.base.isNullOrUndefined(o)&&this.popupContent&&o.id.indexOf("tooltip")>-1||!sf.base.isNullOrUndefined(i)||!sf.base.isNullOrUndefined(s)||t.target.classList.contains("e-chips-close"))this.isClearTarget=!1;else{var r="Inline"===this.mode?this.element.querySelector(".e-editable-component"):this.element,l="Inline"===this.mode?this.element.querySelector(".e-editable-action-buttons"):this.componentParent;r.contains(t.target)||l&&l.contains(t.target)||sf.base.closest(t.target,".e-dropdown-popup.e-control.e-rte-elements")||sf.base.closest(t.target,".e-dropdown-popup.e-control.e-colorpicker-popup")||this.popupContent&&this.popupContent.contains(t.target)||("Submit"!==this.actionOnBlur||this.element.querySelector(".validation-message")?"Cancel"===this.actionOnBlur&&this.dotNetRef.invokeMethodAsync("CancelAction",null):this.dotNetRef.invokeMethodAsync("SaveAction",null))}},t}();return{initialize:function(e,n,o){sf.base.isNullOrUndefined(e)||(new t(e,n,o),e.blazor__instance.initialize())},openEditor:function(e,t){sf.base.isNullOrUndefined(e)||e.blazor__instance.openEditor(t)},closeEditor:function(e,t){sf.base.isNullOrUndefined(e)||e.blazor__instance.removeEditor(t)},destroy:function(e,t){sf.base.isNullOrUndefined(e)||e.blazor__instance.Destroy(t)},propertyChanged:function(e,t){sf.base.isNullOrUndefined(e)||e.blazor__instance.updateContext(t)},validate:function(e){return e&&e.blazor__instance.validate()}}}()}}); -------------------------------------------------------------------------------- /Server/wwwroot/_content/syncfusion.blazor/scripts/sf-lineargauge-ddeaa8.min.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function i(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)i.d(n,o,function(t){return e[t]}.bind(null,o));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="_content/Syncfusion.Blazor/scripts/",i(i.s="./bundles/sf-lineargauge.js")}({"./bundles/sf-lineargauge.js":function(e,t,i){"use strict";i.r(t);i("./modules/sf-lineargauge.js")},"./modules/sf-lineargauge.js":function(e,t){window.sfBlazor=window.sfBlazor||{},window.sfBlazor.LinearGauge=function(){"use strict";var e=function(){function e(e,t,i,n,o){this.id=e,this.element=t,this.dotNetRef=n,this.options=i,this.element.blazor__instance=this,this.individualId=o}return e.prototype.render=function(){this.wireEvents()},e.prototype.wireEvents=function(){ 2 | /*! Bind the Event handler */ 3 | sf.base.EventHandler.add(this.element,sf.base.Browser.touchStartEvent,this.gaugeOnMouseDown,this),sf.base.EventHandler.add(this.element,sf.base.Browser.touchMoveEvent,this.gaugeOnMouseMove,this),sf.base.EventHandler.add(this.element,sf.base.Browser.touchEndEvent,this.gaugeOnMouseEnd,this),sf.base.EventHandler.add(this.element,sf.base.Browser.touchCancelEvent,this.gaugeOnMouseEnd,this),sf.base.EventHandler.add(this.element,"click",this.gaugeOnMouseClick,this),sf.base.EventHandler.add(this.element,"mouseleave",this.gaugeOnMouseLeave,this),window.addEventListener(sf.base.Browser.isTouch&&"orientation"in window&&"onorientationchange"in window?"orientationchange":"resize",this.gaugeOnResize.bind(this))},e.prototype.gaugeOnResize=function(){var e=document.getElementById(this.element.id);if(null!=e){var t=e.clientWidth||e.offsetWidth,i=e.clientHeight||e.offsetHeight;this.dotNetRef.invokeMethodAsync("TriggerResizeEvent",t,i)}},e.prototype.gaugeOnMouseClick=function(e){var t=e.target.id;(t.indexOf("Bar")>-1||t.indexOf("Marker")>-1)&&(this.pointerCheck=!1)},e.prototype.gaugeOnMouseLeave=function(e){this.dotNetRef.invokeMethodAsync("TriggerMouseLeaveEvent",e.x,e.y)},e.prototype.gaugeOnMouseDown=function(e){var t=e.target.id;if(t.indexOf("Bar")>-1||t.indexOf("Marker")>-1){this.pointerCheck=!0;var i=parseInt(t.split("_AxisIndex_")[1].split("_")[0],10),n=parseInt(t.split("_AxisIndex_")[1].split("_")[2],10);this.dotNetRef.invokeMethodAsync("TriggerDragStart",i,n)}else this.dotNetRef.invokeMethodAsync("TriggerMouseDownEvent",e.x,e.y)},e.prototype.gaugeOnMouseMove=function(e){var t=e.target.id;if(t.indexOf("Bar")>-1&&this.pointerCheck||t.indexOf("Marker")>-1&&this.pointerCheck){var i=this.svgClient(t),n=parseInt(t.split("_AxisIndex_")[1].split("_")[0],10),o=parseInt(t.split("_AxisIndex_")[1].split("_")[2],10);this.dotNetRef.invokeMethodAsync("TriggerDragMove",t,n,o,e.clientX-i.left,e.clientY-i.top)}if(t.indexOf("Bar")>-1||t.indexOf("Marker")>-1||t.indexOf("Range")>-1){i=this.svgClient(t),n=parseInt(t.split("_AxisIndex_")[1].split("_")[0],10),o=parseInt(t.split("_AxisIndex_")[1].split("_")[2],10);var s=t.split("_")[0],r=document.getElementById(s).getBoundingClientRect(),d={Bottom:r.bottom,Height:r.height,Left:r.left,Right:r.right,Top:r.top,Width:r.width,X:r.x,Y:r.y},l=document.getElementById(s+"_AxisLine_"+n).getBoundingClientRect(),a={Bottom:l.bottom,Height:l.height,Left:l.left,Right:l.right,Top:l.top,Width:l.width,X:l.x,Y:l.y},u=document.getElementById(s+"_MajorTicksLine_"+n).getBoundingClientRect(),g={Bottom:u.bottom,Height:u.height,Left:u.left,Right:u.right,Top:u.top,Width:u.width,X:u.x,Y:u.y},h=document.getElementById(t).getBoundingClientRect(),f={Bottom:h.bottom,Height:h.height,Left:h.left,Right:h.right,Top:h.top,Width:h.width,X:h.x,Y:h.y},c=t.split("_")[0];null!=(p=document.getElementById(c+"_Tooltip"))&&(p.style.visibility="visible"),this.dotNetRef.invokeMethodAsync("TriggerTooltip",t,n,o,e.clientX-i.left,e.clientY-i.top,d,a,g,f)}else{var p;c=t.split("_")[0];null!=(p=document.getElementById(c+"_Tooltip"))&&(p.style.visibility="hidden")}},e.prototype.gaugeOnMouseEnd=function(e){var t=e.target.id;if(this.pointerCheck=!1,t.indexOf("Bar")>-1||t.indexOf("Marker")>-1){this.pointerCheck=!1;var i=this.svgClient(t),n=t.split("_AxisIndex_")[0].split("_")[0],o=parseInt(t.split("_AxisIndex_")[1].split("_")[0],10),s=parseInt(t.split("_AxisIndex_")[1].split("_")[2],10);this.dotNetRef.invokeMethodAsync("TriggerDragEnd",o,s,n,t,e.clientX-i.left,e.clientY-i.top)}else this.dotNetRef.invokeMethodAsync("TriggerMouseUpEvent",e.x,e.y)},e.prototype.svgClient=function(e){return document.getElementById(e.split("_AxisIndex_")[0]+"_svg").getBoundingClientRect()},e}();return{initialize:function(t,i,n,o){return new e(t.id,t,i,n,o).render(),this.getElementSize(t)},getElementSize:function(e){var t,i;if(null!=e){var n=e.getBoundingClientRect();t=n.width,i=n.height}return{width:t,height:i,isIE:sf.base.Browser.isIE}},setPathAttribute:function(e,t,i,n,o){var s=document.getElementById(e);""===t?s.setAttribute("d",i):(s.setAttribute("x",n.toString()),s.setAttribute("y",o.toString()))},getElementBounds:function(e){var t=document.getElementById(e);if(t){var i=t.getBoundingClientRect();return{width:i.width,height:i.height,top:i.top,bottom:i.bottom,left:i.left,right:i.right}}return null}}}()}}); -------------------------------------------------------------------------------- /Server/wwwroot/_content/syncfusion.blazor/scripts/sf-listbox-ddeaa8.min.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function n(s){if(t[s])return t[s].exports;var r=t[s]={i:s,l:!1,exports:{}};return e[s].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,s){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(n.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(s,r,function(t){return e[t]}.bind(null,r));return s},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="_content/Syncfusion.Blazor/scripts/",n(n.s="./bundles/sf-listbox.js")}({"./bundles/sf-listbox.js":function(e,t,n){"use strict";n.r(t);n("./modules/sf-listbox.js")},"./modules/sf-listbox.js":function(e,t){window.sfBlazor=window.sfBlazor||{},window.sfBlazor.ListBox=function(){"use strict";var e="e-list-item",t=function(){function t(e,t,n,s){this.element=e,this.scopeElement=t,this.dotnetRef=s,this.allowDragAndDrop=n,this.element.blazor__instance=this,sf.base.EventHandler.add(this.element,"keydown",this.keyDownHandler,this),sf.base.isNullOrUndefined(this.scopeElement.blazor__instance)||this.scopeElement.blazor__instance.scope||(this.scopeElement!==this.element&&(this.scope=sf.base.getUniqueID("scopedListBox"),this.scopeElement.blazor__instance.scope=this.scope,this.scopeElement.blazor__instance.initializeDraggable()),this.initializeDraggable())}return t.prototype.initializeDraggable=function(){var t=this;if(this.allowDragAndDrop){var n=sf.base.select(".e-ul",this.element);new sf.lists.Sortable(n,{scope:this.scope,itemClass:e,beforeDragStart:this.triggerBeforeDragStart.bind(this),dragStart:this.triggerDragStart.bind(this),beforeDrop:this.dragEnd.bind(this),placeHolder:function(){return sf.base.createElement("span",{className:"e-placeholder"})},helper:function(n){var s=t.element.cloneNode(),r=n.sender.cloneNode(!0);s.appendChild(r);var i=sf.base.select("."+e,t.element);s.style.width=i.offsetWidth+"px",s.style.height=i.offsetHeight+"px";var o=[].slice.call(sf.base.selectAll("."+e+".e-selected",t.element));return o.length&&o.length>1&&o.indexOf(n.sender)>-1&&r.appendChild(sf.base.createElement("span",{className:"e-list-badge",innerHTML:o.length.toString()})),s.style.zIndex=sf.popups.getZindexPartial(t.element).toString(),s}})}},t.prototype.triggerBeforeDragStart=function(e){e.cancel=e.target.classList.contains("e-drag-prevent")},t.prototype.triggerDragStart=function(e){e.bindEvents(e.dragElement)},t.prototype.dragEnd=function(e){var t,n=!1,s=!1;this.element!==this.scopeElement&&(t=sf.base.closest(e.target,"#"+this.scopeElement.id)),t?n=!0:(t=sf.base.closest(e.target,"#"+this.element.id))&&(s=!0),e.cancel=!0,this.dotnetRef.invokeMethodAsync("DragEnd",e.droppedElement.getAttribute("data-value"),s,n,e.previousIndex,e.currentIndex)},t.prototype.keyDownHandler=function(t){var n=t.target;if(38===t.keyCode||40===t.keyCode)if(t.preventDefault(),n.classList.contains("e-listbox-container")){var s=sf.base.select("."+e,this.element);s&&s.focus()}else{var r=[].slice.call(sf.base.selectAll("."+e,this.element)),i=r.indexOf(n);if(i<0)return;if((i=38===t.keyCode?i-1:i+1)<0||i>r.length-1)return;r[i].focus()}else(65===t.keyCode&&t.ctrlKey||32===t.keyCode)&&t.preventDefault()},t.prototype.destroyDraggable=function(){var e=sf.base.getComponent(sf.base.select(".e-ul",this.element),"sortable");sf.base.isNullOrUndefined(e)||e.destroy()},t.prototype.destroy=function(){this.destroyDraggable(),sf.base.EventHandler.remove(this.element,"keydown",this.keyDownHandler)},t}();return{initialize:function(e,n,s,r){sf.base.isNullOrUndefined(e)||new t(e,n,s,r)},destroy:function(e){sf.base.isNullOrUndefined(e)||sf.base.isNullOrUndefined(e.blazor__instance)||e.blazor__instance.destroy()}}}()}}); -------------------------------------------------------------------------------- /Server/wwwroot/_content/syncfusion.blazor/scripts/sf-maskedtextbox-ddeaa8.min.js: -------------------------------------------------------------------------------- 1 | !function(t){var e={};function s(i){if(e[i])return e[i].exports;var n=e[i]={i:i,l:!1,exports:{}};return t[i].call(n.exports,n,n.exports,s),n.l=!0,n.exports}s.m=t,s.c=e,s.d=function(t,e,i){s.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},s.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},s.t=function(t,e){if(1&e&&(t=s(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(s.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var n in t)s.d(i,n,function(e){return t[e]}.bind(null,n));return i},s.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return s.d(e,"a",e),e},s.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},s.p="_content/Syncfusion.Blazor/scripts/",s(s.s="./bundles/sf-maskedtextbox.js")}({"./bundles/sf-maskedtextbox.js":function(t,e,s){"use strict";s.r(e);s("./modules/sf-maskedtextbox.js")},"./modules/sf-maskedtextbox.js":function(t,e){window.sfBlazor=window.sfBlazor||{},window.sfBlazor.MaskedTextBox=function(){"use strict";var t=function(){function t(t,e,s,i){this.ismultipledelete=!1,this.isClicked=!1,this.previousVal="",this.inputData=null,this.wrapperElement=t,this.isClicked=!1,this.sIndex=0,this.eIndex=0,this.element=e,this.options=i,this.element.blazor__instance=this,this.dotNetRef=s,this.previousVal=this.options.maskedValue}return t.prototype.initialize=function(){sf.base.EventHandler.add(this.element,"focus",this.focusHandler,this),sf.base.EventHandler.add(this.element,"blur",this.focusOutHandler,this),sf.base.EventHandler.add(this.element,"paste",this.pasteHandler,this),sf.base.EventHandler.add(this.element,"cut",this.cutHandler,this),sf.base.EventHandler.add(this.element,"mousedown",this.mouseDownHandler,this),sf.base.EventHandler.add(this.element,"mouseup",this.mouseUpHandler,this),sf.base.EventHandler.add(this.element,"keydown",this.keyDownHandler,this),sf.base.EventHandler.add(this.element,"input",this.inputHandler,this),sf.base.EventHandler.add(this.element,"select",this.selectionHandler,this)},t.prototype.focusOutHandler=function(t){var e=this.wrapperElement.querySelector(".e-clear-icon");null!==e&&e.classList.add("e-clear-icon-hide")},t.prototype.mouseDownHandler=function(t){this.isClicked=!0},t.prototype.mouseUpHandler=function(t){this.isClicked=!1,sf.base.Browser.isDevice&&(this.ismultipledelete=!1,this.sIndex=this.eIndex=0)},t.prototype.selectionHandler=function(t){var e=this.element;e.selectionStart!==e.selectionEnd&&sf.base.Browser.isDevice&&(this.sIndex=e.selectionStart,this.eIndex=e.selectionEnd)},t.prototype.keyDownHandler=function(t){var e=this.element;this.previousVal=e.value,sf.base.Browser.isDevice||(e.selectionStart!==e.selectionEnd?(this.sIndex=e.selectionStart,this.eIndex=e.selectionEnd):(this.ismultipledelete=!1,this.sIndex=this.eIndex=0))},t.prototype.inputHandler=function(t){if(this.options.mask){var e=this.element;if(t.data||t.inputType){var s=t.data?t.data:"deleteContentBackward"===t.inputType?"Backspace":"deleteContentForward"===t.inputType?"Delete":null,i=e.selectionStart,n=e.selectionEnd;if(this.sIndex!==this.eIndex?(this.ismultipledelete=!0,i=this.sIndex,n=this.eIndex,this.sIndex=this.eIndex=0):n=i=t.data?i-1:"deleteContentBackward"===t.inputType?i+1:i,e.value=this.previousVal,e.selectionStart=e.selectionEnd=i,this.ismultipledelete){this.ismultipledelete=!1;var o=this.multipleDeletion(this.previousVal,i,n);e.value=o,this.previousVal=e.value,e.selectionStart=e.selectionEnd=i,null!==s&&"Backspace"!==s&&"Delete"!==s&&this.updateMask(s,i)}else this.updateMask(s,i);this.previousVal=e.value,this.updateServerValue()}else this.inputData=e.value,e.value=this.previousVal,e.selectionStart=e.selectionEnd=e.selectionStart,this.pasteHandler(t)}},t.prototype.multipleDeletion=function(t,e,s){for(var i=t,n=e;n=0&&e=0&&("<"===this.options.hiddenMask[e]?(i=!0,n=!1,this.options.hiddenMask=this.options.hiddenMask.replace(this.options.hiddenMask[e],"")):">"===this.options.hiddenMask[e]?(n=!0,i=!1,this.options.hiddenMask=this.options.hiddenMask.replace(this.options.hiddenMask[e],"")):"|"===this.options.hiddenMask[e]&&(i=!1,n=!1,this.options.hiddenMask=this.options.hiddenMask.replace(this.options.hiddenMask[e],""))),"Backspace"===t||"Delete"===t)"Backspace"===t?(this.options.promptMask[e-1]===this.options.promptCharacter?s.value=o.substring(0,e-1)+this.options.promptCharacter+o.substring(e):s.value=o.substring(0,e-1)+this.options.promptMask[e-1]+o.substring(e),s.selectionStart=s.selectionEnd=e-1):(this.options.promptMask[e]===this.options.promptCharacter?s.value=o.substring(0,e)+this.options.promptCharacter+o.substring(e+1):s.value=o.substring(0,e)+this.options.promptMask[e]+o.substring(e+1),s.selectionStart=s.selectionEnd=e);else if(e=0;i--){if(s.value[i]===e.options.promptCharacter){a=!0;break}if(s.value[i]!==e.options.mask[i]){a=!1;break}}})),this.isClicked||"Always"!==this.options.floatLabelType&&(null===n||""===n)&&null!==this.options.placeHolder&&""!==this.options.placeHolder)){for(i=0;i0?this.dotNetRef.invokeMethodAsync("ServerAction","increment",e):t<0&&this.dotNetRef.invokeMethodAsync("ServerAction","decrement",e)},t.prototype.focusHandler=function(e){this.isFocused=!0,this.options.enabled&&!this.options.readonly&&(sf.base.Browser.isDevice||sf.base.EventHandler.add(this.element,"mousewheel DOMMouseScroll",this.mouseWheel,this))},t.prototype.focusOutHandler=function(e){this.isFocused=!1,e.preventDefault(),sf.base.Browser.isDevice||sf.base.EventHandler.remove(this.element,"mousewheel DOMMouseScroll",this.mouseWheel)},t.prototype.mouseDownOnSpinner=function(e){var t=this;this.isFocused&&(this.isPrevFocused=!0,e.preventDefault());var n=e.currentTarget,s=n.classList.contains("e-spin-up")?"increment":"decrement";sf.base.EventHandler.add(n,"mouseleave",this.mouseUpClick,this),this.timeOut=setInterval((function(){t.isCalled=!0,t.dotNetRef.invokeMethodAsync("ServerAction",s,e)}),150),sf.base.EventHandler.add(document,"mouseup",this.mouseUpClick,this)},t.prototype.mouseUpOnSpinner=function(e){if(this.isPrevFocused&&(this.element.focus(),sf.base.Browser.isDevice||(this.isPrevFocused=!1)),sf.base.Browser.isDevice||e.preventDefault(),this.getElementData(e)){var t=e.currentTarget,n=t.classList.contains("e-spin-up")?"increment":"decrement";sf.base.EventHandler.remove(t,"mouseleave",this.mouseUpClick),this.isCalled||this.dotNetRef.invokeMethodAsync("ServerAction",n,e),this.isCalled=!1,sf.base.EventHandler.remove(document,"mouseup",this.mouseUpClick)}},t.prototype.touchMoveOnSpinner=function(e){document.elementFromPoint(e.clientX,e.clientY).classList.contains("e-input-group-icon")||clearInterval(this.timeOut)},t.prototype.getElementData=function(e){return!(e.which&&3===e.which||e.button&&2===e.button||!this.options.enabled||this.options.readonly)&&(clearInterval(this.timeOut),!0)},t.prototype.mouseUpClick=function(e){e.stopPropagation(),clearInterval(this.timeOut),this.isCalled=!1,sf.base.EventHandler.remove(this.spinUp,"mouseleave",this.mouseUpClick),sf.base.EventHandler.remove(this.spinDown,"mouseleave",this.mouseUpClick)},t.prototype.selectRange=function(e){var t=this;if(sf.base.Browser.isDevice||"11.0"!==sf.base.Browser.info.version){var n=sf.base.Browser.isDevice&&sf.base.Browser.isIos?600:30;setTimeout((function(){t.element.setSelectionRange(0,e.length)}),n)}else this.element.setSelectionRange(0,e.length)},t.prototype.isDevice=function(){return sf.base.Browser.isDevice},t.prototype.spinButtonEvents=function(){this.spinDown=this.wrapperElement?this.wrapperElement.querySelector(".e-spin-down"):null,this.spinUp=this.wrapperElement?this.wrapperElement.querySelector(".e-spin-up"):null,this.spinDown&&this.spinUp&&(this.unBindSpinButton(),this.bindSpinButton())},t.prototype.bindSpinButton=function(){sf.base.EventHandler.add(this.spinUp,sf.base.Browser.touchStartEvent,this.mouseDownOnSpinner,this),sf.base.EventHandler.add(this.spinDown,sf.base.Browser.touchStartEvent,this.mouseDownOnSpinner,this),sf.base.EventHandler.add(this.spinUp,sf.base.Browser.touchEndEvent,this.mouseUpOnSpinner,this),sf.base.EventHandler.add(this.spinDown,sf.base.Browser.touchEndEvent,this.mouseUpOnSpinner,this),sf.base.EventHandler.add(this.spinUp,sf.base.Browser.touchMoveEvent,this.touchMoveOnSpinner,this),sf.base.EventHandler.add(this.spinDown,sf.base.Browser.touchMoveEvent,this.touchMoveOnSpinner,this)},t.prototype.unBindSpinButton=function(){sf.base.EventHandler.remove(this.spinUp,sf.base.Browser.touchStartEvent,this.mouseDownOnSpinner),sf.base.EventHandler.remove(this.spinDown,sf.base.Browser.touchStartEvent,this.mouseDownOnSpinner),sf.base.EventHandler.remove(this.spinUp,sf.base.Browser.touchEndEvent,this.mouseUpOnSpinner),sf.base.EventHandler.remove(this.spinDown,sf.base.Browser.touchEndEvent,this.mouseUpOnSpinner),sf.base.EventHandler.remove(this.spinUp,sf.base.Browser.touchMoveEvent,this.touchMoveOnSpinner),sf.base.EventHandler.remove(this.spinDown,sf.base.Browser.touchMoveEvent,this.touchMoveOnSpinner)},t}();return{initialize:function(e,n,s,i){n&&new t(e,n,s,i),n&&n.blazor__instance&&n.blazor__instance.initialize()},selectRange:function(e,t){e&&e.blazor__instance&&e.blazor__instance.selectRange(t)},propertyChanges:function(e,t){e&&e.blazor__instance&&(e.blazor__instance.options=t)},focusIn:function(e){e&&e.focus()},focusOut:function(e){e&&e.blur()},spinButtonEvents:function(e){e&&e.blazor__instance&&e.blazor__instance.spinButtonEvents()}}}()}}); -------------------------------------------------------------------------------- /Server/wwwroot/_content/syncfusion.blazor/scripts/sf-sidebar-ddeaa8.min.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function i(s){if(t[s])return t[s].exports;var n=t[s]={i:s,l:!1,exports:{}};return e[s].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.m=e,i.c=t,i.d=function(e,t,s){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(i.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(s,n,function(t){return e[t]}.bind(null,n));return s},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="_content/Syncfusion.Blazor/scripts/",i(i.s="./bundles/sf-sidebar.js")}({"./bundles/sf-sidebar.js":function(e,t,i){"use strict";i.r(t);i("./modules/sf-sidebar.js")},"./modules/sf-sidebar.js":function(e,t){window.sfBlazor=window.sfBlazor||{},window.sfBlazor.Sidebar=function(){"use strict";var e="Left",t=function(){function t(e,t,i){this.enableGestures=!0,this.isOpen=!1,this.closeOnDocumentClick=!1,this.isPositionChange=!1,this.dockSize="auto",this.width="auto",this.isSwipChange=!1,this.element=e,this.element.blazor__instance=this,this.dotnetRef=t,this.resetProperty(i)}return t.prototype.initialize=function(){this.setTarget(),this.addClass(),this.setType(),this.setCloseOnDocumentClick(),this.setMediaQuery(),sf.base.Browser.isDevice&&(this.windowWidth=window.innerWidth),this.wireEvents()},t.prototype.addClass=function(){var e=document.querySelector(".e-main-content");sf.base.isNullOrUndefined(e||this.targetElement)||sf.base.addClass([e||this.targetElement],["e-content-animation"])},t.prototype.setTarget=function(){this.targetElement=this.element.nextElementSibling,"string"==typeof this.target&&(this.target=document.querySelector(this.target)),this.target&&(this.target.insertBefore(this.element,this.target.children[0]),sf.base.addClass([this.element],"e-sidebar-absolute"),sf.base.addClass([this.target],"e-sidebar-context"),this.targetElement=this.getTargetElement())},t.prototype.getTargetElement=function(){for(var e=this.element.nextElementSibling;!sf.base.isNullOrUndefined(e)&&e.classList.contains("e-sidebar");)e=e.nextElementSibling;return e},t.prototype.hide=function(){var t=this,i=document.querySelector(".e-main-content")||this.targetElement;!this.enableDock&&i&&(i.style.transform="translateX(0px)",i.style[this.position===e?"marginLeft":"marginRight"]="0px"),this.destroyBackDrop(),this.isOpen=!1,this.enableDock&&setTimeout((function(){return t.sidebarTimeout()}),50),sf.base.EventHandler.add(this.element,"transitionend",this.transitionEnd,this)},t.prototype.show=function(e){var t=this;e&&setTimeout((function(){return t.setType()}),50),this.isOpen=!0,sf.base.EventHandler.add(this.element,"transitionend",this.transitionEnd,this)},t.prototype.transitionEnd=function(t){if(this.enableDock&&!this.isOpen){var i=this.position===e?"-100":"100",s=this.position===e?this.setDimension(this.dockSize):"-"+this.setDimension(this.dockSize),n="z-index: "+this.element.style.zIndex+"; width: "+this.element.style.width+";"+" transform: translateX("+i+"%) translateX("+s+")";this.element.setAttribute("style",n)}this.dotnetRef.invokeMethodAsync("SetDock"),sf.base.isNullOrUndefined(t)||t.target!==this.element||this.dotnetRef.invokeMethodAsync("TriggerChange",this.isOpen,t),sf.base.EventHandler.remove(this.element,"transitionend",this.transitionEnd)},t.prototype.createBackDrop=function(e){(this.resetProperty(e),this.showBackdrop&&this.isOpen)&&(this.modal=sf.base.createElement("div"),this.modal.className="e-sidebar-overlay",this.modal.style.display="block",this.target?(document.querySelector(".e-main-content")||this.targetElement).appendChild(this.modal):document.body.appendChild(this.modal))},t.prototype.destroyBackDrop=function(){this.showBackdrop&&this.modal&&(this.modal.style.display="none",this.modal.outerHTML="",this.modal=null)},t.prototype.enableGestureHandler=function(t){!this.isOpen&&(this.position===e&&"Right"===t.swipeDirection&&t.startX<=20&&t.distanceX>=50&&t.velocity>=.5||"Right"===this.position&&t.swipeDirection===e&&window.innerWidth-t.startX<=20&&t.distanceX>=50&&t.velocity>=.5)?(this.dotnetRef.invokeMethodAsync("Show",t),this.show(),this.isSwipChange=!0):(this.isOpen&&this.position===e&&t.swipeDirection===e||"Right"===this.position&&"Right"===t.swipeDirection)&&(this.dotnetRef.invokeMethodAsync("Hide",t),this.hide(),this.isSwipChange=!1)},t.prototype.resize=function(){this.setMediaQuery(),sf.base.Browser.isDevice&&(this.windowWidth=window.innerWidth)},t.prototype.setEnableGestures=function(e){this.resetProperty(e),this.enableGestures?(this.mainContentElement=new sf.base.Touch(document.body,{swipe:this.enableGestureHandler.bind(this)}),this.sidebarElement=new sf.base.Touch(this.element,{swipe:this.enableGestureHandler.bind(this)})):this.mainContentElement&&this.sidebarElement&&(this.mainContentElement.destroy(),this.sidebarElement.destroy())},t.prototype.wireEvents=function(){this.setEnableGestures(),window.addEventListener("resize",this.resize.bind(this))},t.prototype.unWireEvents=function(){window.removeEventListener("resize",this.resize.bind(this)),sf.base.EventHandler.remove(document,"mousedown touchstart",this.documentclickHandler),this.mainContentElement&&this.mainContentElement.destroy(),this.sidebarElement&&this.sidebarElement.destroy()},t.prototype.documentclickHandler=function(e){sf.base.closest(e.target,".e-control.e-sidebar")||(this.dotnetRef.invokeMethodAsync("TriggerHide",e),this.hide())},t.prototype.setCloseOnDocumentClick=function(e){this.resetProperty(e),this.closeOnDocumentClick?sf.base.EventHandler.add(document,"mousedown touchstart",this.documentclickHandler,this):sf.base.EventHandler.remove(document,"mousedown touchstart",this.documentclickHandler)},t.prototype.setMediaQuery=function(){this.mediaQuery&&this.windowWidth!==window.innerWidth&&(window.matchMedia(this.mediaQuery).matches?this.dotnetRef.invokeMethodAsync("TriggerShow",null):this.isOpen&&this.dotnetRef.invokeMethodAsync("TriggerHide",null))},t.prototype.setDimension=function(e){return e="number"==typeof e?sf.base.formatUnit(e):"string"==typeof e?e.match(/px|%|em/)?e:sf.base.formatUnit(e):"100%"},t.prototype.sidebarTimeout=function(){var e=document.querySelector(".e-main-content")||this.targetElement,t=this.isOpen?this.setDimension(this.width):this.setDimension(this.dockSize),i=this.setDimension(this.element.getBoundingClientRect().width);e&&(this.isOpen?this.positionStyles(this.width,e,i,t):this.element.classList.contains("e-close")&&this.positionStyles(this.dockSize,e,i,t))},t.prototype.positionStyles=function(t,i,s,n){this.position===e?i.style.marginLeft="auto"===t?s:n:i.style.marginRight="auto"===t?s:n},t.prototype.siblingStyle=function(t,i){t.style[this.position===e?"marginLeft":"marginRight"]=i},t.prototype.resetProperty=function(e){sf.base.isNullOrUndefined(e)||(this.type=e.Type,this.isOpen=e.IsOpen,this.isPositionChange=this.position!==e.Position,this.position=e.Position,this.enableDock=e.EnableDock,this.showBackdrop=e.ShowBackdrop,this.target=e.Target,this.enableGestures=e.EnableGestures,this.closeOnDocumentClick=e.CloseOnDocumentClick,this.mediaQuery=e.MediaQuery,this.dockSize=e.DockSize,this.width=e.Width)},t.prototype.setType=function(t){this.resetProperty(t);var i=this.element.getBoundingClientRect().width;i=this.enableDock&&!this.isOpen?this.dockSize:i;var s=document.querySelector(".e-main-content")||this.targetElement;if(s){this.isPositionChange&&(s.style[this.position===e?"marginRight":"marginLeft"]="0px"),s.style.transform="translateX(0px)",sf.base.Browser.isDevice||"Auto"===this.type||(s.style[this.position===e?"marginLeft":"marginRight"]="0px"),this.isPositionChange=!1;var n="string"==typeof i?i:i+"px",o=this.position===e?i:-i,r=s&&(this.enableDock||this.isOpen||this.isSwipChange);switch(this.type){case"Push":r&&this.siblingStyle(s,n);break;case"Slide":r&&(s.style.transform="translateX("+o+"px)");break;case"Over":this.enableDock&&this.element.classList.contains("e-close")&&this.siblingStyle(s,n);break;case"Auto":sf.base.Browser.isDevice?this.enableDock&&!this.isOpen&&this.siblingStyle(s,n):(this.enableDock||this.isOpen||this.isSwipChange)&&this.siblingStyle(s,n),this.isSwipChange=!1}}},t.prototype.destroy=function(){this.destroyBackDrop(),this.element.style.width=this.element.style.zIndex=this.element.style.transform="",this.windowWidth=null;var e=document.querySelector(".e-main-content")||this.targetElement;sf.base.isNullOrUndefined(e)||(e.style.margin=e.style.transform=""),this.unWireEvents()},t}();return{initialize:function(e,i,s){return new t(e,i,s),this.isValid(e)&&(e.blazor__instance.initialize(),sf.base.removeClass([e],"e-hidden")),!(sf.base.Browser.isDevice||!window.matchMedia(s.MediaQuery))||!(!sf.base.Browser.isDevice||!s.IsOpen)},setType:function(e,t){this.isValid(e)&&e.blazor__instance.setType(t)},hide:function(e,t){this.isValid(e)&&(e.blazor__instance.setType(t),e.blazor__instance.hide())},show:function(e,t,i){this.isValid(e)&&(e.blazor__instance.setType(t),e.blazor__instance.createBackDrop(t),e.blazor__instance.show(i))},onPropertyChange:function(e,t){this.isValid(e)&&(void 0!==t.CloseOnDocumentClick&&e.blazor__instance.setCloseOnDocumentClick(t),void 0!==t.ShowBackdrop&&e.blazor__instance.createBackDrop(t))},destroy:function(e){this.isValid(e)&&e&&e.blazor__instance.destroy()},isValid:function(e){return!(!e||!e.blazor__instance)}}}()}}); -------------------------------------------------------------------------------- /Server/wwwroot/_content/syncfusion.blazor/scripts/sf-smith-chart-ddeaa8.min.js: -------------------------------------------------------------------------------- 1 | !function(t){var e={};function i(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)i.d(n,o,function(e){return t[e]}.bind(null,o));return n},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="_content/Syncfusion.Blazor/scripts/",i(i.s="./bundles/sf-smith-chart.js")}({"./bundles/sf-smith-chart.js":function(t,e,i){"use strict";i.r(e);i("./modules/sf-smith-chart.js")},"./modules/sf-smith-chart.js":function(t,e){window.sfBlazor=window.sfBlazor||{},window.sfBlazor.SmithChart=function(){"use strict";var t=function(){function t(t,e,i){this.mouseY=0,this.mouseX=0,this.resizeTo=0,this.id=t,this.element=e,this.dotNetRef=i,this.element.blazor__instance=this}return t.prototype.unWireEvents=function(){var t=sf.base.Browser.isPointer?"pointerleave":"mouseleave";sf.base.EventHandler.remove(this.element,sf.base.Browser.touchMoveEvent,this.mouseMove),sf.base.EventHandler.remove(this.element,"click",this.chartOnMouseClick),sf.base.EventHandler.remove(this.element,t,this.mouseLeave),window.removeEventListener(sf.base.Browser.isTouch&&"orientation"in window&&"onorientationchange"in window?"orientationchange":"resize",this.rangeResize.bind(this)),this.element=null,this.dotNetRef=null},t.prototype.wireEvents=function(){var t=sf.base.Browser.isPointer?"pointerleave":"mouseleave";sf.base.EventHandler.add(this.element,sf.base.Browser.touchMoveEvent,this.mouseMove,this),sf.base.EventHandler.add(this.element,"click",this.chartOnMouseClick,this),sf.base.EventHandler.add(this.element,t,this.mouseLeave,this),window.addEventListener(sf.base.Browser.isTouch&&"orientation"in window&&"onorientationchange"in window?"orientationchange":"resize",this.rangeResize.bind(this))},t.prototype.mouseMove=function(t){document.getElementById(this.id+"_svg")&&this.setMouseXY(t),this.dotNetRef&&this.dotNetRef.invokeMethodAsync("OnSmithChartMouseMove",this.getEventArgs(t))},t.prototype.chartOnMouseClick=function(t){this.dotNetRef&&this.dotNetRef.invokeMethodAsync("OnSmithChartMouseClick",this.getEventArgs(t))},t.prototype.mouseLeave=function(t){this.setMouseXY(t),this.dotNetRef&&this.dotNetRef.invokeMethodAsync("OnSmithChartMouseLeave",this.getEventArgs(t))},t.prototype.rangeResize=function(t){var e=this;this.dotNetRef&&(this.resizeTo&&clearTimeout(this.resizeTo),this.resizeTo=window.setTimeout((function(){e.dotNetRef.invokeMethodAsync("OnSmithChartResize",t)}),500))},t.prototype.setMouseXY=function(t){var e,i,n;"touchmove"===t.type?(e=(n=t).changedTouches[0].clientX,i=n.changedTouches[0].clientY):(e=t.clientX,i=t.clientY);var o=document.getElementById(this.id+"_svg").getBoundingClientRect(),s=document.getElementById(this.id).getBoundingClientRect();this.mouseY=i-s.top-Math.max(o.top-s.top,0),this.mouseX=e-s.left-Math.max(o.left-s.left,0)},t.prototype.getEventArgs=function(t){return{type:t.type,clientX:t.clientX,clientY:t.clientY,mouseX:this.mouseX,mouseY:this.mouseY,pointerType:t.pointerType,target:t.target.id,changedTouches:{clientX:t.changedTouches?t.changedTouches[0].clientX:0,clientY:t.changedTouches?t.changedTouches[0].clientY:0}}},t}();return{id:"",mouseY:0,mouseX:0,initialize:function(e,i,n,o,s){return s?(new t(e,s,i).wireEvents(),s.style.height=n,s.style.width=o,{width:s.clientWidth||s.offsetWidth,height:s.clientHeight||s.offsetHeight}):{width:0,height:0}},getElementBoundsById:function(t){this.id=t;var e=document.getElementById(t);return e?{width:e.clientWidth||e.offsetWidth,height:e.clientHeight||e.offsetHeight}:{width:0,height:0}},charCollection:["0","1","2","3","4","5","6","7","8","9","!",'"',"#","$","%","&","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~"," "],measureText:function(t,e,i,n,o){var s=document.getElementById("chartmeasuretext");return null===s&&(s=sf.base.createElement("text",{id:"chartmeasuretext"}),document.body.appendChild(s))," "===t&&(t=" "),s.innerHTML=t,s.style.position="fixed",s.style.fontSize="100px",s.style.fontWeight=i,s.style.fontStyle=n,s.style.fontFamily=o,s.style.visibility="hidden",s.style.top="-100",s.style.left="0",s.style.whiteSpace="nowrap",s.style.lineHeight="normal",{Width:s.clientWidth,Height:s.clientHeight}},getCharSizeByFontKeys:function(t){for(var e={},i=this.charCollection,n=i.length,o=t.length,s=0;s=t.delay&&(o.setAttribute("visibility","visible"),i?o.setAttribute("width",n.linear(t.timeStamp-t.delay,0,l,t.duration).toString()):o.setAttribute("x",n.reverselinear(t.timeStamp-t.delay,l,0,t.duration).toString()))},end:function(){i?o.setAttribute("width",l.toString()):o.setAttribute("x",r.toString())}})}},getTemplateSize:function(t){var e=document.getElementById(t);return e?{width:e.offsetWidth,height:e.offsetHeight}:null},fadeOut:function(t){sf.base.isNullOrUndefined(t.blazor__instance)||!sf.base.isNullOrUndefined(t.blazor__instance)&&sf.base.isNullOrUndefined(t.blazor__instance.tooltip)||t.blazor__instance.tooltip.fadeOut()},tooltip:{},renderTooltip:function(t,e,i){var n=document.getElementById(e+"_svg"),o=!(n&&parseInt(n.getAttribute("opacity"),10)>0),s=JSON.parse(t),r=i.blazor__instance;o?(r.tooltip=new sf.svgbase.Tooltip(s),r.tooltip.appendTo("#"+e)):sf.base.isNullOrUndefined(r.tooltip)||(r.tooltip.location=new sf.svgbase.TooltipLocation(s.location.x,s.location.y),r.tooltip.content=s.content,r.tooltip.header=s.header,r.tooltip.palette=s.palette,r.tooltip.shapes=s.shapes,r.tooltip.data=s.data,r.tooltip.template=s.template,r.tooltip.textStyle.color=s.textStyle.color||r.tooltip.textStyle.color,r.tooltip.textStyle.fontFamily=s.textStyle.fontFamily||r.tooltip.textStyle.fontFamily,r.tooltip.textStyle.fontStyle=s.textStyle.fontStyle||r.tooltip.textStyle.fontStyle,r.tooltip.textStyle.fontWeight=s.textStyle.fontWeight||r.tooltip.textStyle.fontWeight,r.tooltip.textStyle.opacity=s.textStyle.opacity||r.tooltip.textStyle.opacity,r.tooltip.textStyle.size=s.textStyle.size||r.tooltip.textStyle.size,r.tooltip.dataBind())},destroy:function(t){t&&t.blazor__instance&&t.blazor__instance.unWireEvents()}}}()}}); -------------------------------------------------------------------------------- /Server/wwwroot/_content/syncfusion.blazor/scripts/sf-sparkline-ddeaa8.min.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function n(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(i,o,function(t){return e[t]}.bind(null,o));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="_content/Syncfusion.Blazor/scripts/",n(n.s="./bundles/sf-sparkline.js")}({"./bundles/sf-sparkline.js":function(e,t,n){"use strict";n.r(t);n("./modules/sf-sparkline.js")},"./modules/sf-sparkline.js":function(e,t){window.sfBlazor=window.sfBlazor||{},window.sfBlazor.Sparkline=function(){"use strict";var e=function(){function e(e,t){this.resizeTo=0,this.element=e,this.dotNetRef=t,this.element.blazor__instance=this}return e.prototype.wireEvents=function(){sf.base.EventHandler.add(this.element,sf.base.Browser.touchMoveEvent,this.mousemove.bind(this),this),sf.base.EventHandler.add(this.element,sf.base.Browser.isPointer?"pointerleave":"mouseleave",this.mouseleave.bind(this),this),sf.base.EventHandler.add(this.element,"click",this.click,this),window.addEventListener(sf.base.Browser.isTouch&&"orientation"in window&&"onorientationchange"in window?"orientationchange":"resize",this.resize.bind(this))},e.prototype.unWireEvents=function(){sf.base.EventHandler.remove(this.element,sf.base.Browser.touchMoveEvent,this.mousemove),sf.base.EventHandler.remove(this.element,"click",this.click),sf.base.EventHandler.remove(this.element,sf.base.Browser.isPointer?"pointerleave":"mouseleave",this.mouseleave),window.removeEventListener(sf.base.Browser.isTouch&&"orientation"in window&&"onorientationchange"in window?"orientationchange":"resize",this.resize.bind(this)),this.element=null,this.dotNetRef=null},e.prototype.resize=function(){var e=this;this.dotNetRef&&(this.resizeTo&&clearTimeout(this.resizeTo),this.resizeTo=window.setTimeout((function(){e.dotNetRef.invokeMethodAsync("OnResize")}),500))},e.prototype.mouseleave=function(){this.dotNetRef&&this.dotNetRef.invokeMethodAsync("OnMouseLeave")},e.prototype.click=function(){this.dotNetRef&&this.dotNetRef.invokeMethodAsync("OnClick")},e.prototype.mousemove=function(e){var t,n,i=this.element.getBoundingClientRect(),o=document.getElementById(this.element.id+"_svg").getBoundingClientRect(),s=document.getElementById(this.element.id+"_Secondary_Element");if(s&&(s.style.left=Math.max((o?o.left:0)-(i?i.left:0),0)+"px",s.style.top=Math.max((o?o.top:0)-(i?i.top:0),0)+"px"),e.type.indexOf("touch")>-1){var r=e;r.changedTouches?(n=r.changedTouches[0].clientX,t=r.changedTouches[0].clientY):(t=e.clientY,n=e.clientX)}else t=e.clientY,n=e.clientX;this.dotNetRef&&this.dotNetRef.invokeMethodAsync("OnMouseMove",n,t,i?i.top:0,i?i.left:0,o?o.top:0,o?o.left:0,e.target?e.target.id:"",sf.base.Browser.isIE)},e}();return{initialize:function(t,n){if(t)return new e(t,n).wireEvents(),this.getElementSize(t)},getElementSize:function(e){var t=e.parentElement?e.parentElement.clientWidth||0:100,n=e.parentElement?e.parentElement.clientHeight||0:50;return{width:e.clientWidth||e.offsetWidth,height:e.clientHeight||e.offsetHeight,parentWidth:t,parentHeight:n,isDevice:sf.base.Browser.isDevice,windowWidth:window.innerWidth,windowHeight:window.innerHeight}},destroy:function(e){e&&e.blazor__instance&&e.blazor__instance.unWireEvents()}}}()}}); -------------------------------------------------------------------------------- /Server/wwwroot/_content/syncfusion.blazor/scripts/sf-spinner-ddeaa8.min.js: -------------------------------------------------------------------------------- 1 | !function(e){var n={};function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:r})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var i in e)t.d(r,i,function(n){return e[n]}.bind(null,i));return r},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="_content/Syncfusion.Blazor/scripts/",t(t.s="./bundles/sf-spinner.js")}({"./bundles/sf-spinner.js":function(e,n,t){"use strict";t.r(n);t("./modules/sf-spinner.js")},"./modules/sf-spinner.js":function(e,n){window.sfBlazor=window.sfBlazor||{},window.sfBlazor.Spinner=function(){"use strict";var e=function(){function e(e,n,t){this.element=e,this.dotNetRef=t,this.updateContext(n),this.element.blazor__instance=this}return e.prototype.initialize=function(e,n){return this.appendTarget(n),window.getComputedStyle(e,":after").getPropertyValue("content").replace(/['"]+/g,"")},e.prototype.appendTarget=function(e){sf.base.isNullOrUndefined(e)||document.querySelector(e).appendChild(this.element)},e.prototype.updateContext=function(e){sf.base.extend(this,this,e)},e}();return{initialize:function(n,t,r){return sf.base.isNullOrUndefined(n)?null:(new e(n,t,r),sf.base.isNullOrUndefined(n)||sf.base.isNullOrUndefined(n.blazor__instance)?null:n.blazor__instance.initialize(n,t))},updateTarget:function(e,n){if(!sf.base.isNullOrUndefined(e)&&!sf.base.isNullOrUndefined(e.blazor__instance))return e.blazor__instance.appendTarget(n)}}}()}}); -------------------------------------------------------------------------------- /Server/wwwroot/_content/syncfusion.blazor/scripts/sf-spreadsheet-ddeaa8.min.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="_content/Syncfusion.Blazor/scripts/",n(n.s="./bundles/sf-spreadsheet.js")}({"./bundles/sf-spreadsheet.js":function(e,t,n){"use strict";n.r(t);n("./modules/sf-spreadsheet.js")},"./modules/sf-spreadsheet.js":function(e,t){window.sfBlazor=window.sfBlazor||{},window.sfBlazor.Spreadsheet=function(){"use strict";return{initialize:function(e,t){},saveAsFile:function(e,t){if(navigator.msSaveBlob){for(var n=window.atob(t),r=new Uint8Array(n.length),o=0;o-1)for(var r=0,l=i.length;r0),r=JSON.parse(e),l=n.blazor__instance;s&&!sf.base.isNullOrUndefined(l)?(l.tooltip=new sf.svgbase.Tooltip(r),l.tooltip.appendTo("#"+t)):sf.base.isNullOrUndefined(l.tooltip)||(l.tooltip.location=new sf.svgbase.TooltipLocation(r.location.x,r.location.y),l.tooltip.content=r.content,l.tooltip.header=r.header,l.tooltip.offset=r.offset,l.tooltip.palette=r.palette,l.tooltip.shapes=r.shapes,l.tooltip.data=r.data,l.tooltip.template=r.template,l.tooltip.textStyle.color=r.textStyle.color||l.tooltip.textStyle.color,l.tooltip.textStyle.fontFamily=r.textStyle.fontFamily||l.tooltip.textStyle.fontFamily,l.tooltip.textStyle.fontStyle=r.textStyle.fontStyle||l.tooltip.textStyle.fontStyle,l.tooltip.textStyle.fontWeight=r.textStyle.fontWeight||l.tooltip.textStyle.fontWeight,l.tooltip.textStyle.opacity=r.textStyle.opacity||l.tooltip.textStyle.opacity,l.tooltip.textStyle.size=r.textStyle.size||l.tooltip.textStyle.size,l.tooltip.isNegative=r.isNegative,l.tooltip.clipBounds=new sf.svgbase.TooltipLocation(r.clipBounds.x,r.clipBounds.y),l.tooltip.arrowPadding=r.arrowPadding,l.tooltip.dataBind())},fadeOut:function(e){if(!(sf.base.isNullOrUndefined(e.blazor__instance)||!sf.base.isNullOrUndefined(e.blazor__instance)&&sf.base.isNullOrUndefined(e.blazor__instance.tooltip))){var t=document.getElementById(e.blazor__instance.tooltip.element.id+"_svg");t&&"0"===t.getAttribute("opacity")||e.blazor__instance.tooltip.fadeOut()}},getElementBoundsById:function(e,t){void 0===t&&(t=!0),t&&(this.id=e);var o=document.getElementById(e);if(o){var n=o.getBoundingClientRect();return{width:o.clientWidth||o.offsetWidth,height:o.clientHeight||o.offsetHeight,left:n.left,top:n.top,right:n.right,bottom:n.bottom}}return{width:0,height:0,left:0,top:0,right:0,bottom:0}},getBrowserDeviceInfo:function(){return{browserName:sf.base.Browser.info.name,isPointer:sf.base.Browser.isPointer,isDevice:sf.base.Browser.isDevice,isTouch:sf.base.Browser.isTouch,isIos:sf.base.Browser.isIos||sf.base.Browser.isIos7}},setAttribute:function(e,t,o){var n=document.getElementById(e);n&&n.setAttribute(t,o)},createTooltip:function(e,t,o,n,i){var s=document.getElementById(e),r="top:"+o.toString()+"px;left:"+n.toString()+"px;color:black !important; background:#FFFFFF !important; position:absolute;border:1px solid #707070;font-size:"+i+";border-radius:2px; z-index:1";s?(s.setAttribute("innerHTML"," "+t+" "),s.setAttribute("styles",r)):(s=sf.base.createElement("div",{id:e,innerHTML:" "+t+" ",styles:r}),document.body.appendChild(s))},removeElement:function(e){var t=this.getElement(e);t&&sf.base.remove(t)},resizeBound:{},resize:{},chartResize:function(e,t){var o=this;return this.resize&&clearTimeout(this.resize),this.resize=setTimeout((function(){for(var n=e.length,i=0;i0&&this.timeOut>0&&(sf.base.EventHandler.add(t.element,"mouseover",this.toastHoverAction.bind(this,s)),sf.base.EventHandler.add(t.element,"mouseleave",this.delayedToastProgress.bind(this,s))),t.showProgressBar&&(this.progressObj[s].progressEle=t.element.querySelector("."+e)),sf.base.EventHandler.add(t.element,"keydown",this.keyDownHandler,this)}},t.prototype.getDomObject=function(e,t){return null!=t?window.sfBlazor.getDomObject(e,t):null},t.prototype.swipeHandler=function(e){var t=sf.base.closest(e.originalEvent.target,".e-toast:not(.e-toast-container)"),n=this.hideAnimation.effect;sf.base.isNullOrUndefined(t)||("Right"===e.swipeDirection?(this.hideAnimation.effect="SlideRightOut",this.hide("swipe",t)):"Left"===e.swipeDirection&&(this.hideAnimation.effect="SlideLeftOut",this.hide("swipe",t)),this.hideAnimation.effect=n)},t.prototype.delayedToastProgress=function(t){var n=this.progressObj[t],i=n.element;n.timeOutId=window.setTimeout(this.destroyToast.bind(this,i),this.extendedTimeout),n.maxHideTime=parseFloat(this.extendedTimeout+""),n.hideEta=(new Date).getTime()+n.maxHideTime,sf.base.isNullOrUndefined(i.querySelector("."+e))||(n.intervalId=setInterval(this.updateProgressBar.bind(this,n),10))},t.prototype.toastHoverAction=function(t){this.dotNetRef.invokeMethodAsync("ClearTimeout",t),clearTimeout(this.progressObj[t].timeOutId),clearInterval(this.progressObj[t].intervalId),this.progressObj[t].hideEta=0;var n=this.progressObj[t].element;sf.base.isNullOrUndefined(n.querySelector("."+e))||(this.progressObj[t].progressEle.style.width="0%"),this.dotNetRef.invokeMethodAsync("MouseoverEvent",t)},t.prototype.updateProgressBar=function(e){var t=(e.hideEta-(new Date).getTime())/e.maxHideTime*100;t="LTR"===this.progressDirection?100-t:t,e.progressEle.style.width=t+"%"},t.prototype.appendToast=function(e){this.newestOnTop&&0!==this.toastContainer.childElementCount&&this.toastContainer.insertBefore(e,this.toastContainer.children[0]),sf.base.removeClass([e],"e-blazor-toast-hidden")},t.prototype.setAnimation=function(e){var t=this,n=this,i=this.showAnimation,s={duration:i.duration,name:i.effect,timingFunction:i.easing,begin:function(){e.element.style.display=""},end:function(){n.dotNetRef.invokeMethodAsync("OpenEvent",e.index,t.getDomObject("element",e.element))}};new sf.base.Animation(s).animate(e.element)},t.prototype.hide=function(e,t){if(!sf.base.isNullOrUndefined(this.toastContainer)&&0!==this.toastContainer.childElementCount)if("string"!==n(t)||"All"!==t){if("string"===n(t)&&"All"!==t){var i=this.toastContainer.querySelector("#toast_"+t);i&&(this.destroyToast(i,e),this.dotNetRef.invokeMethodAsync("DestroyTimer",parseInt(t,10)))}sf.base.isNullOrUndefined(t)&&(t=this.newestOnTop?this.toastContainer.lastElementChild:this.toastContainer.firstElementChild),this.destroyToast(t,e);var s=parseInt(t.id.split("toast_")[1],10);this.dotNetRef.invokeMethodAsync("DestroyTimer",s)}else for(var o=0;o0;)this.toastContainer.removeAttribute(this.toastContainer.attributes[0].name);for(var e=this.toastContainer.children,t=e.length-1;t>=0;t--)sf.base.detach(e[t]);sf.base.isNullOrUndefined(this.refElement)||sf.base.isNullOrUndefined(this.refElement.parentElement)||(this.refElement.parentElement.insertBefore(this.toastContainer,this.refElement),sf.base.detach(this.refElement),this.refElement=void 0)},t.prototype.keyDownHandler=function(e){if(e.target.classList.contains("e-toast-close-icon")&&(13===e.keyCode||32===e.keyCode)){var t=e.target,n=sf.base.closest(t,".e-toast");this.destroyToast(n,"key")}},t.prototype.updateContext=function(e){sf.base.extend(this,this,e)},t}();return{initialize:function(e,n,i){sf.base.isNullOrUndefined(e)||(new t(e,n,i),e.blazor__instance.initialize(e))},show:function(e){sf.base.isNullOrUndefined(e.rootElement)||(e.rootElement.blazor__instance.updateContext(e),e.rootElement.blazor__instance.show(e))},hideAnimationToast:function(e,t){sf.base.isNullOrUndefined(e)||e.blazor__instance.hideAnimationToast(e.querySelector("#toast_"+t),t)},hide:function(e,t,n,i){sf.base.isNullOrUndefined(e)||(e.blazor__instance.updateContext(n),e.blazor__instance.hide(i,t))},appendToast:function(e,t){sf.base.isNullOrUndefined(e)||e.blazor__instance.appendToast(t)},destroy:function(e){sf.base.isNullOrUndefined(e)||e.blazor__instance.destroy()}}}()}}); -------------------------------------------------------------------------------- /Server/wwwroot/_content/syncfusion.blazor/scripts/sf-treemap-ddeaa8.min.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function n(i){if(t[i])return t[i].exports;var s=t[i]={i:i,l:!1,exports:{}};return e[i].call(s.exports,s,s.exports,n),s.l=!0,s.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)n.d(i,s,function(t){return e[t]}.bind(null,s));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="_content/Syncfusion.Blazor/scripts/",n(n.s="./bundles/sf-treemap.js")}({"./bundles/sf-treemap.js":function(e,t,n){"use strict";n.r(t);n("./modules/sf-treemap.js")},"./modules/sf-treemap.js":function(e,t){window.sfBlazor=window.sfBlazor||{},window.sfBlazor.Treemap=function(){"use strict";var e=function(){function e(e,t){this.resizeTo=0,this.element=e,this.dotNetRef=t,this.element.blazor__instance=this}return e.prototype.initializeEvents=function(){sf.base.EventHandler.add(this.element,"mouseup",this.mouseUp.bind(this),this),sf.base.EventHandler.add(this.element,"mousemove",this.mouseMove.bind(this),this),sf.base.EventHandler.add(this.element,"mousedown",this.mouseDown.bind(this),this),sf.base.EventHandler.add(this.element,"mouseleave",this.mouseLeave.bind(this),this),sf.base.EventHandler.add(this.element,"contextmenu",this.contextMenuEvent.bind(this),this),window.addEventListener("resize",this.resize.bind(this))},e.prototype.unWireEvents=function(){sf.base.EventHandler.remove(this.element,"mouseup",this.mouseUp),sf.base.EventHandler.remove(this.element,"mousemove",this.mouseMove),sf.base.EventHandler.remove(this.element,"mousedown",this.mouseDown),sf.base.EventHandler.remove(this.element,"mouseleave",this.mouseLeave),sf.base.EventHandler.remove(this.element,"contextmenu",this.contextMenuEvent),window.removeEventListener("resize",this.resize.bind(this)),this.element=null,this.dotNetRef=null},e.prototype.contextMenuEvent=function(){this.dotNetRef&&this.dotNetRef.invokeMethodAsync("TriggerRightClick")},e.prototype.resize=function(){var e,t,n=this;null!=this.element&&(e=this.element.getBoundingClientRect().width,t=this.element.getBoundingClientRect().height),this.dotNetRef&&(this.resizeTo&&clearTimeout(this.resizeTo),this.resizeTo=window.setTimeout((function(){n.dotNetRef.invokeMethodAsync("TriggerResize",e,t)}),500))},e.prototype.mouseDown=function(e){e.preventDefault();var t=this.getElementId(e.target.id);this.dotNetRef&&this.dotNetRef.invokeMethodAsync("TriggerMouseDown",e.target.id,t)},e.prototype.mouseUp=function(e){var t=this.getElementId(e.target.id);this.dotNetRef&&this.dotNetRef.invokeMethodAsync("TriggerMouseUp",e.target.id,t,3===e.which)},e.prototype.mouseMove=function(e){var t,n;if(null!=this.element){var i=this.element.children[1],s=i.getBoundingClientRect(),o=i.ownerDocument.defaultView.pageXOffset,r=i.ownerDocument.defaultView.pageYOffset,l=i.ownerDocument.documentElement.clientTop,u=i.ownerDocument.documentElement.clientLeft,a=s.left+o-u,d=s.top+r-l;t=e.pageX-a,n=e.pageY-d}this.dotNetRef&&this.dotNetRef.invokeMethodAsync("TriggerMouseMove",e.target.id,t,n)},e.prototype.mouseLeave=function(e){this.dotNetRef&&this.dotNetRef.invokeMethodAsync("TriggerMouseLeave")},e.prototype.getElementId=function(e){return sf.base.isNullOrUndefined(e)||""===e?"":document.getElementById(e).textContent},e}();return{initialize:function(t,n){return new e(t,n).initializeEvents(),this.getElementSize(t)},getElementSize:function(e){var t,n;if(null!=e){var i=e.getBoundingClientRect();t=i.width,n=i.height}return{width:t,height:n,isIE:sf.base.Browser.isIE}},setElementAttribute:function(e,t,n,i,s,o,r,l,u){for(var a=0;a=0;c--)(s=e[c])&&(l=(i<3?s(l):i>3?s(t,o,l):s(t,o))||l);return i>3&&l&&Object.defineProperty(t,o,l),l};var s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return o(t,e),r([sf.base.Property("")],t.prototype,"iconCss",void 0),r([sf.base.Property("")],t.prototype,"id",void 0),r([sf.base.Property(!1)],t.prototype,"separator",void 0),r([sf.base.Property("")],t.prototype,"text",void 0),r([sf.base.Property("")],t.prototype,"url",void 0),r([sf.base.Property(!1)],t.prototype,"disabled",void 0),t}(sf.base.ChildProperty);return e.getModel=function(e,t){for(var n=sf.base.extend({},e),o=0,r=Object.keys(n);o Statuses = 11 | new List() { 12 | new SyncfusionHelpDeskStatus(){ ID= "New", Text= "New" }, 13 | new SyncfusionHelpDeskStatus(){ ID= "Open", Text= "Open" }, 14 | new SyncfusionHelpDeskStatus(){ ID= "Urgent", Text= "Urgent" }, 15 | new SyncfusionHelpDeskStatus(){ ID= "Closed", Text= "Closed" }, 16 | }; 17 | } 18 | } -------------------------------------------------------------------------------- /Shared/Models/SyncfusionHelpDeskTicketDetails.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel.DataAnnotations; 3 | using Oqtane.Models; 4 | 5 | namespace Syncfusion.Helpdesk.Models 6 | { 7 | public class SyncfusionHelpDeskTicketDetails : IAuditable 8 | { 9 | [Key] 10 | public int HelpDeskTicketDetailId { get; set; } 11 | public int HelpDeskTicketId { get; set; } 12 | public DateTime TicketDetailDate { get; set; } 13 | public string TicketDescription { get; set; } 14 | public string CreatedBy { get; set; } 15 | public DateTime CreatedOn { get; set; } 16 | public string ModifiedBy { get; set; } 17 | public DateTime ModifiedOn { get; set; } 18 | 19 | public virtual SyncfusionHelpDeskTickets HelpDeskTicket { get; set; } 20 | } 21 | } -------------------------------------------------------------------------------- /Shared/Models/SyncfusionHelpDeskTickets.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel.DataAnnotations; 4 | using System.ComponentModel.DataAnnotations.Schema; 5 | using Oqtane.Models; 6 | 7 | namespace Syncfusion.Helpdesk.Models 8 | { 9 | public class SyncfusionHelpDeskTickets : IAuditable 10 | { 11 | public SyncfusionHelpDeskTickets() 12 | { 13 | SyncfusionHelpDeskTicketDetails = 14 | new HashSet(); 15 | } 16 | 17 | [Key] 18 | public int HelpDeskTicketId { get; set; } 19 | public int ModuleId { get; set; } 20 | 21 | [Required] 22 | public string TicketStatus { get; set; } 23 | 24 | [Required] 25 | public DateTime TicketDate { get; set; } 26 | 27 | [Required] 28 | [StringLength(50, MinimumLength = 2, 29 | ErrorMessage = 30 | "Description must be a minimum of 2 and " + 31 | "maximum of 50 characters.")] 32 | public string TicketDescription { get; set; } 33 | 34 | public string CreatedBy { get; set; } 35 | public DateTime CreatedOn { get; set; } 36 | public string ModifiedBy { get; set; } 37 | public DateTime ModifiedOn { get; set; } 38 | 39 | public virtual ICollection 40 | SyncfusionHelpDeskTicketDetails 41 | { get; set; } 42 | } 43 | } -------------------------------------------------------------------------------- /Shared/Syncfusion.HelpDesk.Shared.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net8.0 5 | 1.0.0 6 | Syncfusion.Helpdesk 7 | Syncfusion 8 | Syncfusion 9 | Helpdesk 10 | Syncfusion 11 | Syncfusion.Helpdesk.Shared.Oqtane 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Syncfusion.HelpDesk.sln: -------------------------------------------------------------------------------- 1 | Microsoft Visual Studio Solution File, Format Version 12.00 2 | # Visual Studio Version 16 3 | VisualStudioVersion = 16.0.28621.142 4 | MinimumVisualStudioVersion = 10.0.40219.1 5 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syncfusion.Helpdesk.Client", "Client\Syncfusion.Helpdesk.Client.csproj", "{AA8E58A1-CD09-4208-BF66-A8BB341FD669}" 6 | EndProject 7 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syncfusion.Helpdesk.Server", "Server\Syncfusion.Helpdesk.Server.csproj", "{04B05448-788F-433D-92C0-FED35122D45A}" 8 | EndProject 9 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syncfusion.Helpdesk.Shared", "Shared\Syncfusion.Helpdesk.Shared.csproj", "{18D73F73-D7BE-4388-85BA-FBD9AC96FCA2}" 10 | EndProject 11 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Syncfusion.Helpdesk.Package", "Package\Syncfusion.Helpdesk.Package.csproj", "{C5CE512D-CBB7-4545-AF0F-9B6591A0C3A7}" 12 | EndProject 13 | Global 14 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 15 | Debug|Any CPU = Debug|Any CPU 16 | Release|Any CPU = Release|Any CPU 17 | Wasm|Any CPU = Wasm|Any CPU 18 | EndGlobalSection 19 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 20 | {AA8E58A1-CD09-4208-BF66-A8BB341FD669}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {AA8E58A1-CD09-4208-BF66-A8BB341FD669}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {AA8E58A1-CD09-4208-BF66-A8BB341FD669}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {AA8E58A1-CD09-4208-BF66-A8BB341FD669}.Release|Any CPU.Build.0 = Release|Any CPU 24 | {AA8E58A1-CD09-4208-BF66-A8BB341FD669}.Wasm|Any CPU.ActiveCfg = Release|Any CPU 25 | {AA8E58A1-CD09-4208-BF66-A8BB341FD669}.Wasm|Any CPU.Build.0 = Release|Any CPU 26 | {04B05448-788F-433D-92C0-FED35122D45A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 27 | {04B05448-788F-433D-92C0-FED35122D45A}.Debug|Any CPU.Build.0 = Debug|Any CPU 28 | {04B05448-788F-433D-92C0-FED35122D45A}.Release|Any CPU.ActiveCfg = Release|Any CPU 29 | {04B05448-788F-433D-92C0-FED35122D45A}.Release|Any CPU.Build.0 = Release|Any CPU 30 | {04B05448-788F-433D-92C0-FED35122D45A}.Wasm|Any CPU.ActiveCfg = Release|Any CPU 31 | {04B05448-788F-433D-92C0-FED35122D45A}.Wasm|Any CPU.Build.0 = Release|Any CPU 32 | {18D73F73-D7BE-4388-85BA-FBD9AC96FCA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 33 | {18D73F73-D7BE-4388-85BA-FBD9AC96FCA2}.Debug|Any CPU.Build.0 = Debug|Any CPU 34 | {18D73F73-D7BE-4388-85BA-FBD9AC96FCA2}.Release|Any CPU.ActiveCfg = Release|Any CPU 35 | {18D73F73-D7BE-4388-85BA-FBD9AC96FCA2}.Release|Any CPU.Build.0 = Release|Any CPU 36 | {18D73F73-D7BE-4388-85BA-FBD9AC96FCA2}.Wasm|Any CPU.ActiveCfg = Release|Any CPU 37 | {18D73F73-D7BE-4388-85BA-FBD9AC96FCA2}.Wasm|Any CPU.Build.0 = Release|Any CPU 38 | {C5CE512D-CBB7-4545-AF0F-9B6591A0C3A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 39 | {C5CE512D-CBB7-4545-AF0F-9B6591A0C3A7}.Debug|Any CPU.Build.0 = Debug|Any CPU 40 | {C5CE512D-CBB7-4545-AF0F-9B6591A0C3A7}.Release|Any CPU.ActiveCfg = Release|Any CPU 41 | {C5CE512D-CBB7-4545-AF0F-9B6591A0C3A7}.Release|Any CPU.Build.0 = Release|Any CPU 42 | {C5CE512D-CBB7-4545-AF0F-9B6591A0C3A7}.Wasm|Any CPU.ActiveCfg = Debug|Any CPU 43 | {C5CE512D-CBB7-4545-AF0F-9B6591A0C3A7}.Wasm|Any CPU.Build.0 = Debug|Any CPU 44 | EndGlobalSection 45 | GlobalSection(SolutionProperties) = preSolution 46 | HideSolutionNode = FALSE 47 | EndGlobalSection 48 | GlobalSection(ExtensibilityGlobals) = postSolution 49 | SolutionGuid = {1D016F15-46FE-4726-8DFD-2E4FD4DC7668} 50 | EndGlobalSection 51 | EndGlobal 52 | --------------------------------------------------------------------------------