diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3729ff0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,25 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..c426b48 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,158 @@ +root = true + +[*] +roslynator_accessibility_modifiers = explicit +roslynator_use_anonymous_function_or_method_group = anonymous_function|method_group +roslynator_enum_has_flag_style = method +roslynator_object_creation_type_style = explicit|implicit|implicit_when_type_is_obvious + +indent_style = space + +trim_trailing_whitespace = true + +insert_final_newline = false + +[*.md] +trim_trailing_whitespace = false + +[*.json] +indent_size = 2 + +[*.cs] +dotnet_sort_system_directives_first = true:warning + +csharp_style_namespace_declarations = file_scoped:warning + +csharp_style_var_for_built_in_types = false:warning + +csharp_style_var_when_type_is_apparent = true:warning + +csharp_style_var_elsewhere = true:warning + +csharp_new_line_before_members_in_anonymous_types = true:warning + +# SA1623: Property summary documentation should match accessors +dotnet_diagnostic.SA1623.severity = none + +# SA1101: Prefix local calls with this +dotnet_diagnostic.SA1101.severity = none + +# SA1642: Constructor summary documentation should begin with standard text +dotnet_diagnostic.SA1642.severity = none + +# SA1309: Field names should not begin with underscore +dotnet_diagnostic.SA1309.severity = none + +# RCS1194: Implement exception constructors. +dotnet_diagnostic.RCS1194.severity = none + +# SA1000: Keywords should be spaced correctly +dotnet_diagnostic.SA1000.severity = none + +# SA1124: Do not use regions +dotnet_diagnostic.SA1124.severity = none + +# SA1413: Use trailing comma in multi-line initializers +dotnet_diagnostic.SA1413.severity = none + +# SA1201: Elements should appear in the correct order +dotnet_diagnostic.SA1201.severity = suggestion + +# SA1638: File header file name documentation should match file name +dotnet_diagnostic.SA1638.severity = warning + +# SA1633: File should have header +dotnet_diagnostic.SA1633.severity = none + +# SA1404: Code analysis suppression should have justification +dotnet_diagnostic.SA1404.severity = none + +# SA1206: Declaration keywords should follow order +dotnet_diagnostic.SA1206.severity = none + +# CA1040: Avoid empty interfaces +dotnet_diagnostic.CA1040.severity = none + +# RCS1012: Use explicit type instead of 'var' +dotnet_diagnostic.RCS1012.severity = none + +# RCS1008: Use explicit type instead of 'var' +dotnet_diagnostic.RCS1008.severity = none + +# CA1725 +dotnet_diagnostic.CA1725.severity = none + +# RCS1009: Use explicit type instead of 'var' +dotnet_diagnostic.RCS1009.severity = none + +# SA1402: File may only contain a single type +dotnet_diagnostic.SA1402.severity = suggestion + +# CA1711 +dotnet_diagnostic.CA1711.severity = none + +# CA1720: Identifier contains type name +dotnet_diagnostic.CA1720.severity = none + +# IDE0022: Use block body for methods +dotnet_diagnostic.IDE0022.severity = none + +# SA1011: Closing square brackets should be spaced correctly +dotnet_diagnostic.SA1011.severity = none + +# CA1721 +dotnet_diagnostic.CA1721.severity = none + +# SA1313: Parameter names should begin with lower-case letter +dotnet_diagnostic.SA1313.severity = none + +# SecurityIntelliSenseCS: MS Security rules violation +dotnet_diagnostic.SecurityIntelliSenseCS.severity = suggestion + +# SA1123: Do not place regions within elements +dotnet_diagnostic.SA1123.severity = none + +# RCS1046: Add suffix 'Async' to asynchronous method name +dotnet_diagnostic.RCS1046.severity = warning + +# SA1625: Element documentation should not be copied and pasted +dotnet_diagnostic.SA1625.severity = none + +# SCS9999 +dotnet_diagnostic.SCS9999.severity = none + +# RCS1090 Add call to 'ConfigureAwait' +dotnet_diagnostic.RCS1090.severity = none + +# RCS1170 Use read-only auto-implemented property +dotnet_diagnostic.RCS1170.severity = none + +# SA1649 +dotnet_diagnostic.SA1649.severity = none + +# RCS1021 Use expression-bodied lambda. +dotnet_diagnostic.RCS1021.severity = none + +# RCS1047 Remove suffix 'Async' from non-asynchronous method name. +# dotnet_diagnostic.RCS1047.severity = silent + +# SA1600 Elements should be documented +dotnet_diagnostic.SA1600.severity = silent + +# CS1591 Missing XML comment for publicly visible type or member +dotnet_diagnostic.CS1591.severity = none + +# SA1602: Enumeration items should be documented +dotnet_diagnostic.SA1602.severity = none + +# CA1720 Identifier 'Decimal' contains type name +dotnet_diagnostic.CA1720.severity = none + +# SA1601: Partial elements should be documented +dotnet_diagnostic.SA1601.severity = silent + +# CA1711 Rename type name UserEventHandler so that it does not end in 'EventHandler' +dotnet_diagnostic.CA1711.severity = none + +# CA1307: Specify StringComparison for clarity +dotnet_diagnostic.CA1307.severity = none \ No newline at end of file diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..14b7856 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# These are supported funding model platforms +open_collective: fullstackhero +custom: ['https://www.buymeacoffee.com/codewithmukesh'] diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..03ec545 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "nuget" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "daily" diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml new file mode 100644 index 0000000..31607fa --- /dev/null +++ b/.github/workflows/dotnet.yml @@ -0,0 +1,25 @@ +name: .NET + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Setup .NET + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 6.0.x + - name: Restore dependencies + run: dotnet restore + - name: Build + run: dotnet build --no-restore + - name: Test + run: dotnet test --no-build --verbosity normal diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8afdcb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,454 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# JetBrains Rider +.idea/ +*.sln.iml + +## +## Visual Studio Code +## +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json diff --git a/.template.config/icon.png b/.template.config/icon.png new file mode 100644 index 0000000..fd9fa41 Binary files /dev/null and b/.template.config/icon.png differ diff --git a/.template.config/ide.host.json b/.template.config/ide.host.json new file mode 100644 index 0000000..837778b --- /dev/null +++ b/.template.config/ide.host.json @@ -0,0 +1,5 @@ +{ + "$schema": "http://json.schemastore.org/vs-2017.3.host", + "order": 0, + "icon": "icon.png" +} \ No newline at end of file diff --git a/.template.config/template.json b/.template.config/template.json new file mode 100644 index 0000000..5fbff2b --- /dev/null +++ b/.template.config/template.json @@ -0,0 +1,51 @@ +{ + "$schema": "http://json.schemastore.org/template", + "author": "Mukesh Murugan", + "classifications": [ + "Blazor", + "WASM", + "WebAssembly", + "Clean Architecture", + "Boilerplate", + "macOS", + "Windows", + "Cloud", + "Web" + ], + "tags": { + "language": "C#", + "type": "project" + }, + "identity": "FullStackHero.BlazorWebAssembly.Boilerplate", + "name": "Blazor WebAssembly Boilerplate - FullStackHero", + "description": "Clean Architecture Boilerplate Template for .NET 6.0 Blazor WebAssembly built for FSH WebAPI with the goodness of MudBlazor Components.", + "shortName": "fsh-blazor", + "sourceName": "FSH.BlazorWebAssembly", + "preferNameDirectory": true, + "sources": [ + { + "source": "./", + "target": "./", + "exclude": [ + ".template.config/**" + ] + } + ], + "primaryOutputs": [ + { + "path": "./" + } + ], + "postActions": [ + { + "description": "Restore NuGet packages required by this project.", + "manualInstructions": [ + { + "text": "Run 'dotnet restore'" + } + ], + "actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025", + "continueOnError": true + } + ] +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..cfcc0fe --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,12 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Launch and Debug Standalone Blazor WebAssembly App", + "type": "blazorwasm", + "request": "launch", + "cwd": "${workspaceFolder}/src/Host", + "url": "https://localhost:5002" + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..fe20a1c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "razor.disableBlazorDebugPrompt": true, + "cSpell.words": [ + "Blazored", + "borderradius", + "Upto" + ] +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..444731d --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,42 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/src/Host/Host.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/src/Host/Host.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "${workspaceFolder}/src/Host/Host.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..35a60b8 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,27 @@ + + + + $(MSBuildThisFileDirectory)dotnet.ruleset + false + false + true + $(OutputPath)$(AssemblyName).xml + true + enable + enable + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + \ No newline at end of file diff --git a/Directory.Build.targets b/Directory.Build.targets new file mode 100644 index 0000000..fd9797b --- /dev/null +++ b/Directory.Build.targets @@ -0,0 +1,5 @@ + + + $(OutputPath)$(AssemblyName).xml + + \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..52246cd --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base +WORKDIR /app +EXPOSE 80 +EXPOSE 443 + +FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build +WORKDIR /src + +COPY ["src/Host/Host.csproj", "src/Host/"] +COPY ["src/Shared/Shared.csproj", "src/Shared/"] +COPY ["src/Client/Client.csproj", "src/Client/"] +COPY ["src/Client.Infrastructure/Client.Infrastructure.csproj", "src/Client.Infrastructure/"] + +RUN dotnet restore "src/Host/Host.csproj" + +COPY . . +WORKDIR "/src/src/Host" + +RUN dotnet publish "Host.csproj" -c Release --no-restore -o /app/publish + +FROM base AS final +WORKDIR /app + +COPY --from=build /app/publish . + +ENTRYPOINT ["dotnet", "RewardsPlus.BlazorWebAssembly.Host.dll"] \ No newline at end of file diff --git a/FSH.BlazorWebAssembly.nuspec b/FSH.BlazorWebAssembly.nuspec new file mode 100644 index 0000000..215e16a --- /dev/null +++ b/FSH.BlazorWebAssembly.nuspec @@ -0,0 +1,25 @@ + + + + FullStackHero.BlazorWebAssembly.Boilerplate + Blazor WebAssembly Boilerplate - FullStackHero + 0.0.1-rc + Mukesh Murugan + + Clean Architecture Boilerplate Template for .NET 6.0 Blazor WebAssembly built for FSH WebAPI with the goodness of MudBlazor Components. + + en-US + MIT + 2021 + https://fullstackhero.net/blazor-webassembly-boilerplate/general/getting-started/ + + + + + cleanarchitecture clean architecture blazor mukesh codewithmukesh fullstackhero solution csharp wasm webassembly mudblazor + ./content/icon.png + + + + + \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6599f6d --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 fullstackhero + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..10be676 --- /dev/null +++ b/README.md @@ -0,0 +1,82 @@ +[![GitHub](https://img.shields.io/github/license/fullstackhero/blazor-wasm-boilerplate?color=2da44e&style=flat-square)](https://github.com/fullstackhero/blazor-wasm-boilerplate/blob/main/LICENSE) +[![Discord](https://img.shields.io/discord/878181478972928011?color=%237289da&label=Discord&logo=discord&logoColor=%237289da&style=flat-square)](https://discord.gg/yQWpShsKrf) +[![Twitter](https://img.shields.io/twitter/follow/codewithmukesh?color=1DA1F2&label=Twitter&logo=Twitter&style=flat-square)](https://twitter.com/codewithmukesh) + +

+ fullstackhero +

+ +# Blazor WebAssembly Boilerplate +Built with .NET 6.0 and the goodness of MudBlazor Component Library. Incorporates the most essential Packages your projects will ever need. Follows Clean Architecture Principles. + +## Goals + +The goal of this repository is to help developers / companies kickstart their Web Application Development with a pre-built Blazor WebAssembly Boilerplate that includes several much needed components and features. + +> Note that this is a frontend / client application only! The backend for this application is available in a seperate repository. +> - Find fullstackhero's .NET 6 Web API Boilerplate here - https://github.com/fullstackhero/dotnet-webapi-boilerplate + +## Prerequisites + +- Make sure you have the API Running. Here is FSH Backend - https://github.com/fullstackhero/dotnet-webapi-boilerplate +- Once fullstackhero's .NET 6 Web API is up and running, run the Blazor WebAssembly Project to consume it's services. + +## Getting Started + +Open up your Command Prompt / Powershell and run the following command to install the solution template. + +```powershell +dotnet new --install FullStackHero.BlazorWebAssembly.Boilerplate +``` +or, if you want to use a specific version of the boilerplate, use + +```powershell +dotnet new --install FullStackHero.BlazorWebAssembly.Boilerplate::0.0.1-rc +``` +This would install the `fullstackhero Blazor WebAssembly Boilerplate` template globally on your machine. Do note that, at the time of writing this documentation, the latest available version is **0.0.1-rc** which is also one of the first stable pre-release version of the package. It is highly likely that there is already a newer version available when you are reading this. + +> *To get the latest version of the package, visit [nuget.org](https://www.nuget.org/packages/FullStackHero.BlazorWebAssembly.Boilerplate/)* +> +> *FullStackHero.BlazorWebAssembly.Boilerplate is now in pre-release state. You can find the latest version on NuGet.org* + +**FullStackHero.BlazorWebAssembly.Boilerplate::0.0.1-rc is compatible only with FullStackHero.WebAPI.Boilerplate::0.0.6-rc and above.** + +Get the .NET WebApi Boilerplate by running the following command + +``` +dotnet new --install FullStackHero.WebAPI.Boilerplate::0.0.6-rc +``` + +For more details on getting started, [read this article](https://fullstackhero.net/blazor-webassembly-boilerplate/general/getting-started/) + +## Community + +- Discord [@fullstackhero](https://discord.gg/gdgHRt4mMw) +- Facebook Page [@codewithmukesh](https://facebook.com/codewithmukesh) +- Youtube Channel [@codewithmukesh](https://youtube.com/c/codewithmukesh) + +## Contributors + +Submit your PR and join the elite list! + + + + + +## License + +This project is licensed with the [MIT license](LICENSE). + +## Support :star: + +Has this Project helped you learn something New? or Helped you at work? +Here are a few ways by which you can support. + +- Leave a star! :star: +- Recommend this awesome project to your colleagues. 🥇 +- Do consider endorsing me on LinkedIn for ASP.NET Core - [Connect via LinkedIn](https://codewithmukesh.com/linkedin) 🦸 +- Or, If you want to support this project in the long run, [consider buying me a coffee](https://www.buymeacoffee.com/codewithmukesh)! ☕ + +
+ +black-button diff --git a/RewardsPlus.BlazorWebAssembly.sln b/RewardsPlus.BlazorWebAssembly.sln new file mode 100644 index 0000000..2c94ebb --- /dev/null +++ b/RewardsPlus.BlazorWebAssembly.sln @@ -0,0 +1,62 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31808.319 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Host", "src\Host\Host.csproj", "{CB2F88F0-F072-420C-9B43-162C2C0773F5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Client", "src\Client\Client.csproj", "{D5DB6E8A-0161-4EF1-B4D9-467E9A7EF9A7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shared", "src\Shared\Shared.csproj", "{0D7A7E2D-CCF4-496E-9F2B-141712F4C00F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Client.Infrastructure", "src\Client.Infrastructure\Client.Infrastructure.csproj", "{28E5DFC7-A05B-40DB-9E35-AC1E84C008A2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F6BE3160-F6ED-4E11-A33F-063DD9186D84}" + ProjectSection(SolutionItems) = preProject + .dockerignore = .dockerignore + .editorconfig = .editorconfig + .gitignore = .gitignore + Directory.Build.props = Directory.Build.props + Directory.Build.targets = Directory.Build.targets + Dockerfile = Dockerfile + dotnet.ruleset = dotnet.ruleset + global.json = global.json + stylecop.json = stylecop.json + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{F529F1FF-B2FD-46D5-80A1-D4C726230E40}" + ProjectSection(SolutionItems) = preProject + scripts\nswag-regen.ps1 = scripts\nswag-regen.ps1 + scripts\pull-shared-from-webapi.ps1 = scripts\pull-shared-from-webapi.ps1 + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CB2F88F0-F072-420C-9B43-162C2C0773F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CB2F88F0-F072-420C-9B43-162C2C0773F5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CB2F88F0-F072-420C-9B43-162C2C0773F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CB2F88F0-F072-420C-9B43-162C2C0773F5}.Release|Any CPU.Build.0 = Release|Any CPU + {D5DB6E8A-0161-4EF1-B4D9-467E9A7EF9A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D5DB6E8A-0161-4EF1-B4D9-467E9A7EF9A7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D5DB6E8A-0161-4EF1-B4D9-467E9A7EF9A7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D5DB6E8A-0161-4EF1-B4D9-467E9A7EF9A7}.Release|Any CPU.Build.0 = Release|Any CPU + {0D7A7E2D-CCF4-496E-9F2B-141712F4C00F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0D7A7E2D-CCF4-496E-9F2B-141712F4C00F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0D7A7E2D-CCF4-496E-9F2B-141712F4C00F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0D7A7E2D-CCF4-496E-9F2B-141712F4C00F}.Release|Any CPU.Build.0 = Release|Any CPU + {28E5DFC7-A05B-40DB-9E35-AC1E84C008A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {28E5DFC7-A05B-40DB-9E35-AC1E84C008A2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {28E5DFC7-A05B-40DB-9E35-AC1E84C008A2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {28E5DFC7-A05B-40DB-9E35-AC1E84C008A2}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {175E8AA9-2BB6-41F9-ACE9-71733ED6EDFD} + EndGlobalSection +EndGlobal diff --git a/blazor-wasm-boilerplate-main/.dockerignore b/blazor-wasm-boilerplate-main/.dockerignore new file mode 100644 index 0000000..3729ff0 --- /dev/null +++ b/blazor-wasm-boilerplate-main/.dockerignore @@ -0,0 +1,25 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/.editorconfig b/blazor-wasm-boilerplate-main/.editorconfig new file mode 100644 index 0000000..c426b48 --- /dev/null +++ b/blazor-wasm-boilerplate-main/.editorconfig @@ -0,0 +1,158 @@ +root = true + +[*] +roslynator_accessibility_modifiers = explicit +roslynator_use_anonymous_function_or_method_group = anonymous_function|method_group +roslynator_enum_has_flag_style = method +roslynator_object_creation_type_style = explicit|implicit|implicit_when_type_is_obvious + +indent_style = space + +trim_trailing_whitespace = true + +insert_final_newline = false + +[*.md] +trim_trailing_whitespace = false + +[*.json] +indent_size = 2 + +[*.cs] +dotnet_sort_system_directives_first = true:warning + +csharp_style_namespace_declarations = file_scoped:warning + +csharp_style_var_for_built_in_types = false:warning + +csharp_style_var_when_type_is_apparent = true:warning + +csharp_style_var_elsewhere = true:warning + +csharp_new_line_before_members_in_anonymous_types = true:warning + +# SA1623: Property summary documentation should match accessors +dotnet_diagnostic.SA1623.severity = none + +# SA1101: Prefix local calls with this +dotnet_diagnostic.SA1101.severity = none + +# SA1642: Constructor summary documentation should begin with standard text +dotnet_diagnostic.SA1642.severity = none + +# SA1309: Field names should not begin with underscore +dotnet_diagnostic.SA1309.severity = none + +# RCS1194: Implement exception constructors. +dotnet_diagnostic.RCS1194.severity = none + +# SA1000: Keywords should be spaced correctly +dotnet_diagnostic.SA1000.severity = none + +# SA1124: Do not use regions +dotnet_diagnostic.SA1124.severity = none + +# SA1413: Use trailing comma in multi-line initializers +dotnet_diagnostic.SA1413.severity = none + +# SA1201: Elements should appear in the correct order +dotnet_diagnostic.SA1201.severity = suggestion + +# SA1638: File header file name documentation should match file name +dotnet_diagnostic.SA1638.severity = warning + +# SA1633: File should have header +dotnet_diagnostic.SA1633.severity = none + +# SA1404: Code analysis suppression should have justification +dotnet_diagnostic.SA1404.severity = none + +# SA1206: Declaration keywords should follow order +dotnet_diagnostic.SA1206.severity = none + +# CA1040: Avoid empty interfaces +dotnet_diagnostic.CA1040.severity = none + +# RCS1012: Use explicit type instead of 'var' +dotnet_diagnostic.RCS1012.severity = none + +# RCS1008: Use explicit type instead of 'var' +dotnet_diagnostic.RCS1008.severity = none + +# CA1725 +dotnet_diagnostic.CA1725.severity = none + +# RCS1009: Use explicit type instead of 'var' +dotnet_diagnostic.RCS1009.severity = none + +# SA1402: File may only contain a single type +dotnet_diagnostic.SA1402.severity = suggestion + +# CA1711 +dotnet_diagnostic.CA1711.severity = none + +# CA1720: Identifier contains type name +dotnet_diagnostic.CA1720.severity = none + +# IDE0022: Use block body for methods +dotnet_diagnostic.IDE0022.severity = none + +# SA1011: Closing square brackets should be spaced correctly +dotnet_diagnostic.SA1011.severity = none + +# CA1721 +dotnet_diagnostic.CA1721.severity = none + +# SA1313: Parameter names should begin with lower-case letter +dotnet_diagnostic.SA1313.severity = none + +# SecurityIntelliSenseCS: MS Security rules violation +dotnet_diagnostic.SecurityIntelliSenseCS.severity = suggestion + +# SA1123: Do not place regions within elements +dotnet_diagnostic.SA1123.severity = none + +# RCS1046: Add suffix 'Async' to asynchronous method name +dotnet_diagnostic.RCS1046.severity = warning + +# SA1625: Element documentation should not be copied and pasted +dotnet_diagnostic.SA1625.severity = none + +# SCS9999 +dotnet_diagnostic.SCS9999.severity = none + +# RCS1090 Add call to 'ConfigureAwait' +dotnet_diagnostic.RCS1090.severity = none + +# RCS1170 Use read-only auto-implemented property +dotnet_diagnostic.RCS1170.severity = none + +# SA1649 +dotnet_diagnostic.SA1649.severity = none + +# RCS1021 Use expression-bodied lambda. +dotnet_diagnostic.RCS1021.severity = none + +# RCS1047 Remove suffix 'Async' from non-asynchronous method name. +# dotnet_diagnostic.RCS1047.severity = silent + +# SA1600 Elements should be documented +dotnet_diagnostic.SA1600.severity = silent + +# CS1591 Missing XML comment for publicly visible type or member +dotnet_diagnostic.CS1591.severity = none + +# SA1602: Enumeration items should be documented +dotnet_diagnostic.SA1602.severity = none + +# CA1720 Identifier 'Decimal' contains type name +dotnet_diagnostic.CA1720.severity = none + +# SA1601: Partial elements should be documented +dotnet_diagnostic.SA1601.severity = silent + +# CA1711 Rename type name UserEventHandler so that it does not end in 'EventHandler' +dotnet_diagnostic.CA1711.severity = none + +# CA1307: Specify StringComparison for clarity +dotnet_diagnostic.CA1307.severity = none \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/.github/FUNDING.yml b/blazor-wasm-boilerplate-main/.github/FUNDING.yml new file mode 100644 index 0000000..14b7856 --- /dev/null +++ b/blazor-wasm-boilerplate-main/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# These are supported funding model platforms +open_collective: fullstackhero +custom: ['https://www.buymeacoffee.com/codewithmukesh'] diff --git a/blazor-wasm-boilerplate-main/.github/dependabot.yml b/blazor-wasm-boilerplate-main/.github/dependabot.yml new file mode 100644 index 0000000..03ec545 --- /dev/null +++ b/blazor-wasm-boilerplate-main/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "nuget" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "daily" diff --git a/blazor-wasm-boilerplate-main/.github/workflows/dotnet.yml b/blazor-wasm-boilerplate-main/.github/workflows/dotnet.yml new file mode 100644 index 0000000..31607fa --- /dev/null +++ b/blazor-wasm-boilerplate-main/.github/workflows/dotnet.yml @@ -0,0 +1,25 @@ +name: .NET + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Setup .NET + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 6.0.x + - name: Restore dependencies + run: dotnet restore + - name: Build + run: dotnet build --no-restore + - name: Test + run: dotnet test --no-build --verbosity normal diff --git a/blazor-wasm-boilerplate-main/.gitignore b/blazor-wasm-boilerplate-main/.gitignore new file mode 100644 index 0000000..8afdcb6 --- /dev/null +++ b/blazor-wasm-boilerplate-main/.gitignore @@ -0,0 +1,454 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# JetBrains Rider +.idea/ +*.sln.iml + +## +## Visual Studio Code +## +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json diff --git a/blazor-wasm-boilerplate-main/.template.config/icon.png b/blazor-wasm-boilerplate-main/.template.config/icon.png new file mode 100644 index 0000000..fd9fa41 Binary files /dev/null and b/blazor-wasm-boilerplate-main/.template.config/icon.png differ diff --git a/blazor-wasm-boilerplate-main/.template.config/ide.host.json b/blazor-wasm-boilerplate-main/.template.config/ide.host.json new file mode 100644 index 0000000..837778b --- /dev/null +++ b/blazor-wasm-boilerplate-main/.template.config/ide.host.json @@ -0,0 +1,5 @@ +{ + "$schema": "http://json.schemastore.org/vs-2017.3.host", + "order": 0, + "icon": "icon.png" +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/.template.config/template.json b/blazor-wasm-boilerplate-main/.template.config/template.json new file mode 100644 index 0000000..5fbff2b --- /dev/null +++ b/blazor-wasm-boilerplate-main/.template.config/template.json @@ -0,0 +1,51 @@ +{ + "$schema": "http://json.schemastore.org/template", + "author": "Mukesh Murugan", + "classifications": [ + "Blazor", + "WASM", + "WebAssembly", + "Clean Architecture", + "Boilerplate", + "macOS", + "Windows", + "Cloud", + "Web" + ], + "tags": { + "language": "C#", + "type": "project" + }, + "identity": "FullStackHero.BlazorWebAssembly.Boilerplate", + "name": "Blazor WebAssembly Boilerplate - FullStackHero", + "description": "Clean Architecture Boilerplate Template for .NET 6.0 Blazor WebAssembly built for FSH WebAPI with the goodness of MudBlazor Components.", + "shortName": "fsh-blazor", + "sourceName": "FSH.BlazorWebAssembly", + "preferNameDirectory": true, + "sources": [ + { + "source": "./", + "target": "./", + "exclude": [ + ".template.config/**" + ] + } + ], + "primaryOutputs": [ + { + "path": "./" + } + ], + "postActions": [ + { + "description": "Restore NuGet packages required by this project.", + "manualInstructions": [ + { + "text": "Run 'dotnet restore'" + } + ], + "actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025", + "continueOnError": true + } + ] +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/.vscode/launch.json b/blazor-wasm-boilerplate-main/.vscode/launch.json new file mode 100644 index 0000000..cfcc0fe --- /dev/null +++ b/blazor-wasm-boilerplate-main/.vscode/launch.json @@ -0,0 +1,12 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Launch and Debug Standalone Blazor WebAssembly App", + "type": "blazorwasm", + "request": "launch", + "cwd": "${workspaceFolder}/src/Host", + "url": "https://localhost:5002" + } + ] +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/.vscode/settings.json b/blazor-wasm-boilerplate-main/.vscode/settings.json new file mode 100644 index 0000000..fe20a1c --- /dev/null +++ b/blazor-wasm-boilerplate-main/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "razor.disableBlazorDebugPrompt": true, + "cSpell.words": [ + "Blazored", + "borderradius", + "Upto" + ] +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/.vscode/tasks.json b/blazor-wasm-boilerplate-main/.vscode/tasks.json new file mode 100644 index 0000000..444731d --- /dev/null +++ b/blazor-wasm-boilerplate-main/.vscode/tasks.json @@ -0,0 +1,42 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/src/Host/Host.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/src/Host/Host.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "${workspaceFolder}/src/Host/Host.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/Directory.Build.props b/blazor-wasm-boilerplate-main/Directory.Build.props new file mode 100644 index 0000000..35a60b8 --- /dev/null +++ b/blazor-wasm-boilerplate-main/Directory.Build.props @@ -0,0 +1,27 @@ + + + + $(MSBuildThisFileDirectory)dotnet.ruleset + false + false + true + $(OutputPath)$(AssemblyName).xml + true + enable + enable + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/Directory.Build.targets b/blazor-wasm-boilerplate-main/Directory.Build.targets new file mode 100644 index 0000000..fd9797b --- /dev/null +++ b/blazor-wasm-boilerplate-main/Directory.Build.targets @@ -0,0 +1,5 @@ + + + $(OutputPath)$(AssemblyName).xml + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/Dockerfile b/blazor-wasm-boilerplate-main/Dockerfile new file mode 100644 index 0000000..2ff39bb --- /dev/null +++ b/blazor-wasm-boilerplate-main/Dockerfile @@ -0,0 +1,26 @@ +FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base +WORKDIR /app +EXPOSE 80 +EXPOSE 443 + +FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build +WORKDIR /src + +COPY ["src/Host/Host.csproj", "src/Host/"] +COPY ["src/Shared/Shared.csproj", "src/Shared/"] +COPY ["src/Client/Client.csproj", "src/Client/"] +COPY ["src/Client.Infrastructure/Client.Infrastructure.csproj", "src/Client.Infrastructure/"] + +RUN dotnet restore "src/Host/Host.csproj" + +COPY . . +WORKDIR "/src/src/Host" + +RUN dotnet publish "Host.csproj" -c Release --no-restore -o /app/publish + +FROM base AS final +WORKDIR /app + +COPY --from=build /app/publish . + +ENTRYPOINT ["dotnet", "FSH.BlazorWebAssembly.Host.dll"] \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/FSH.BlazorWebAssembly.nuspec b/blazor-wasm-boilerplate-main/FSH.BlazorWebAssembly.nuspec new file mode 100644 index 0000000..215e16a --- /dev/null +++ b/blazor-wasm-boilerplate-main/FSH.BlazorWebAssembly.nuspec @@ -0,0 +1,25 @@ + + + + FullStackHero.BlazorWebAssembly.Boilerplate + Blazor WebAssembly Boilerplate - FullStackHero + 0.0.1-rc + Mukesh Murugan + + Clean Architecture Boilerplate Template for .NET 6.0 Blazor WebAssembly built for FSH WebAPI with the goodness of MudBlazor Components. + + en-US + MIT + 2021 + https://fullstackhero.net/blazor-webassembly-boilerplate/general/getting-started/ + + + + + cleanarchitecture clean architecture blazor mukesh codewithmukesh fullstackhero solution csharp wasm webassembly mudblazor + ./content/icon.png + + + + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/FSH.BlazorWebAssembly.sln b/blazor-wasm-boilerplate-main/FSH.BlazorWebAssembly.sln new file mode 100644 index 0000000..2c94ebb --- /dev/null +++ b/blazor-wasm-boilerplate-main/FSH.BlazorWebAssembly.sln @@ -0,0 +1,62 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31808.319 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Host", "src\Host\Host.csproj", "{CB2F88F0-F072-420C-9B43-162C2C0773F5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Client", "src\Client\Client.csproj", "{D5DB6E8A-0161-4EF1-B4D9-467E9A7EF9A7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shared", "src\Shared\Shared.csproj", "{0D7A7E2D-CCF4-496E-9F2B-141712F4C00F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Client.Infrastructure", "src\Client.Infrastructure\Client.Infrastructure.csproj", "{28E5DFC7-A05B-40DB-9E35-AC1E84C008A2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F6BE3160-F6ED-4E11-A33F-063DD9186D84}" + ProjectSection(SolutionItems) = preProject + .dockerignore = .dockerignore + .editorconfig = .editorconfig + .gitignore = .gitignore + Directory.Build.props = Directory.Build.props + Directory.Build.targets = Directory.Build.targets + Dockerfile = Dockerfile + dotnet.ruleset = dotnet.ruleset + global.json = global.json + stylecop.json = stylecop.json + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{F529F1FF-B2FD-46D5-80A1-D4C726230E40}" + ProjectSection(SolutionItems) = preProject + scripts\nswag-regen.ps1 = scripts\nswag-regen.ps1 + scripts\pull-shared-from-webapi.ps1 = scripts\pull-shared-from-webapi.ps1 + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CB2F88F0-F072-420C-9B43-162C2C0773F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CB2F88F0-F072-420C-9B43-162C2C0773F5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CB2F88F0-F072-420C-9B43-162C2C0773F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CB2F88F0-F072-420C-9B43-162C2C0773F5}.Release|Any CPU.Build.0 = Release|Any CPU + {D5DB6E8A-0161-4EF1-B4D9-467E9A7EF9A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D5DB6E8A-0161-4EF1-B4D9-467E9A7EF9A7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D5DB6E8A-0161-4EF1-B4D9-467E9A7EF9A7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D5DB6E8A-0161-4EF1-B4D9-467E9A7EF9A7}.Release|Any CPU.Build.0 = Release|Any CPU + {0D7A7E2D-CCF4-496E-9F2B-141712F4C00F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0D7A7E2D-CCF4-496E-9F2B-141712F4C00F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0D7A7E2D-CCF4-496E-9F2B-141712F4C00F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0D7A7E2D-CCF4-496E-9F2B-141712F4C00F}.Release|Any CPU.Build.0 = Release|Any CPU + {28E5DFC7-A05B-40DB-9E35-AC1E84C008A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {28E5DFC7-A05B-40DB-9E35-AC1E84C008A2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {28E5DFC7-A05B-40DB-9E35-AC1E84C008A2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {28E5DFC7-A05B-40DB-9E35-AC1E84C008A2}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {175E8AA9-2BB6-41F9-ACE9-71733ED6EDFD} + EndGlobalSection +EndGlobal diff --git a/blazor-wasm-boilerplate-main/LICENSE b/blazor-wasm-boilerplate-main/LICENSE new file mode 100644 index 0000000..6599f6d --- /dev/null +++ b/blazor-wasm-boilerplate-main/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 fullstackhero + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/blazor-wasm-boilerplate-main/README.md b/blazor-wasm-boilerplate-main/README.md new file mode 100644 index 0000000..10be676 --- /dev/null +++ b/blazor-wasm-boilerplate-main/README.md @@ -0,0 +1,82 @@ +[![GitHub](https://img.shields.io/github/license/fullstackhero/blazor-wasm-boilerplate?color=2da44e&style=flat-square)](https://github.com/fullstackhero/blazor-wasm-boilerplate/blob/main/LICENSE) +[![Discord](https://img.shields.io/discord/878181478972928011?color=%237289da&label=Discord&logo=discord&logoColor=%237289da&style=flat-square)](https://discord.gg/yQWpShsKrf) +[![Twitter](https://img.shields.io/twitter/follow/codewithmukesh?color=1DA1F2&label=Twitter&logo=Twitter&style=flat-square)](https://twitter.com/codewithmukesh) + +

+ fullstackhero +

+ +# Blazor WebAssembly Boilerplate +Built with .NET 6.0 and the goodness of MudBlazor Component Library. Incorporates the most essential Packages your projects will ever need. Follows Clean Architecture Principles. + +## Goals + +The goal of this repository is to help developers / companies kickstart their Web Application Development with a pre-built Blazor WebAssembly Boilerplate that includes several much needed components and features. + +> Note that this is a frontend / client application only! The backend for this application is available in a seperate repository. +> - Find fullstackhero's .NET 6 Web API Boilerplate here - https://github.com/fullstackhero/dotnet-webapi-boilerplate + +## Prerequisites + +- Make sure you have the API Running. Here is FSH Backend - https://github.com/fullstackhero/dotnet-webapi-boilerplate +- Once fullstackhero's .NET 6 Web API is up and running, run the Blazor WebAssembly Project to consume it's services. + +## Getting Started + +Open up your Command Prompt / Powershell and run the following command to install the solution template. + +```powershell +dotnet new --install FullStackHero.BlazorWebAssembly.Boilerplate +``` +or, if you want to use a specific version of the boilerplate, use + +```powershell +dotnet new --install FullStackHero.BlazorWebAssembly.Boilerplate::0.0.1-rc +``` +This would install the `fullstackhero Blazor WebAssembly Boilerplate` template globally on your machine. Do note that, at the time of writing this documentation, the latest available version is **0.0.1-rc** which is also one of the first stable pre-release version of the package. It is highly likely that there is already a newer version available when you are reading this. + +> *To get the latest version of the package, visit [nuget.org](https://www.nuget.org/packages/FullStackHero.BlazorWebAssembly.Boilerplate/)* +> +> *FullStackHero.BlazorWebAssembly.Boilerplate is now in pre-release state. You can find the latest version on NuGet.org* + +**FullStackHero.BlazorWebAssembly.Boilerplate::0.0.1-rc is compatible only with FullStackHero.WebAPI.Boilerplate::0.0.6-rc and above.** + +Get the .NET WebApi Boilerplate by running the following command + +``` +dotnet new --install FullStackHero.WebAPI.Boilerplate::0.0.6-rc +``` + +For more details on getting started, [read this article](https://fullstackhero.net/blazor-webassembly-boilerplate/general/getting-started/) + +## Community + +- Discord [@fullstackhero](https://discord.gg/gdgHRt4mMw) +- Facebook Page [@codewithmukesh](https://facebook.com/codewithmukesh) +- Youtube Channel [@codewithmukesh](https://youtube.com/c/codewithmukesh) + +## Contributors + +Submit your PR and join the elite list! + + + + + +## License + +This project is licensed with the [MIT license](LICENSE). + +## Support :star: + +Has this Project helped you learn something New? or Helped you at work? +Here are a few ways by which you can support. + +- Leave a star! :star: +- Recommend this awesome project to your colleagues. 🥇 +- Do consider endorsing me on LinkedIn for ASP.NET Core - [Connect via LinkedIn](https://codewithmukesh.com/linkedin) 🦸 +- Or, If you want to support this project in the long run, [consider buying me a coffee](https://www.buymeacoffee.com/codewithmukesh)! ☕ + +
+ +black-button diff --git a/blazor-wasm-boilerplate-main/dotnet.ruleset b/blazor-wasm-boilerplate-main/dotnet.ruleset new file mode 100644 index 0000000..3010e47 --- /dev/null +++ b/blazor-wasm-boilerplate-main/dotnet.ruleset @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/global.json b/blazor-wasm-boilerplate-main/global.json new file mode 100644 index 0000000..f443bd4 --- /dev/null +++ b/blazor-wasm-boilerplate-main/global.json @@ -0,0 +1,7 @@ +{ + "sdk": { + "version": "6.0", + "rollForward": "latestMajor", + "allowPrerelease": true + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/icon.png b/blazor-wasm-boilerplate-main/icon.png new file mode 100644 index 0000000..fd9fa41 Binary files /dev/null and b/blazor-wasm-boilerplate-main/icon.png differ diff --git a/blazor-wasm-boilerplate-main/scripts/nswag-regen.ps1 b/blazor-wasm-boilerplate-main/scripts/nswag-regen.ps1 new file mode 100644 index 0000000..bf62c4a --- /dev/null +++ b/blazor-wasm-boilerplate-main/scripts/nswag-regen.ps1 @@ -0,0 +1,20 @@ +# This script is cross-platform, supporting all OSes that PowerShell Core/7 runs on. + +$currentDirectory = Get-Location +$rootDirectory = git rev-parse --show-toplevel +$hostDirectory = Join-Path -Path $rootDirectory -ChildPath 'src/Host' +$infrastructurePrj = Join-Path -Path $rootDirectory -ChildPath 'src/Client.Infrastructure/Client.Infrastructure.csproj' + +Write-Host "Make sure you have run the FSH.WebApi project. `n" +Write-Host "Press any key to continue... `n" +$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown'); + +Set-Location -Path $hostDirectory +Write-Host "Host Directory is $hostDirectory `n" + +<# Run command #> +dotnet build -t:NSwag $infrastructurePrj + +Set-Location -Path $currentDirectory +Write-Host -NoNewLine 'NSwag Regenerated. Press any key to continue...'; +$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown'); diff --git a/blazor-wasm-boilerplate-main/scripts/pull-shared-from-webapi.ps1 b/blazor-wasm-boilerplate-main/scripts/pull-shared-from-webapi.ps1 new file mode 100644 index 0000000..35dd0ab --- /dev/null +++ b/blazor-wasm-boilerplate-main/scripts/pull-shared-from-webapi.ps1 @@ -0,0 +1,40 @@ +# This script is cross-platform, supporting all OSes that PowerShell Core/7 runs on. + +$rootDirectory = git rev-parse --show-toplevel +$sourcePath = Join-Path -Path $rootDirectory -ChildPath '..\dotnet-webapi-boilerplate\src\Core\Shared' +$destinationPath = Join-Path -Path $rootDirectory -ChildPath 'src\Shared' + +$excludes = @('bin', 'obj') + +Write-Host "Pull changes from the Fullstackhero WebApi Shared Project" +write-Host "---------------------------------------------------------" +Write-Host + +If ($null -eq $sourcePath) { + Write-Error "Error! The expected path of WebApi Shared Project does not exist: $sourcePath" + Exit 1 +} + +if ($null -eq (Resolve-Path $destinationPath)) { + # Ensure the destination exists + try + { + New-Item -Path $destinationPath -ItemType Directory -ErrorAction Stop | Out-Null + } + catch + { + Write-Error "Error! Unable to create output path \"$destinationPath\"" + Exit 1 + } +} + +Write-Host "WARNING! This will delete everything in the shared project ($($destinationPath | Resolve-Path))" +Write-Host "and then copy over the whole project from the webapi repository ($($sourcePath | Resolve-Path))" +Write-Host +Read-Host -Prompt "Press ENTER to continue" + +Remove-Item -Path "$destinationPath" -Recurse -Force +Copy-Item -Path (Get-Item -Path "$sourcePath" -Exclude $excludes).FullName -Destination "$destinationPath" -Recurse -Force + +Write-Host "Changes have been pulled." +Write-Host \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/ApiClient/FSHApi.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/ApiClient/FSHApi.cs new file mode 100644 index 0000000..a74762b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/ApiClient/FSHApi.cs @@ -0,0 +1,6849 @@ +//---------------------- +// +// Generated using the NSwag toolchain v13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org) +// +//---------------------- + +#nullable enable + +#pragma warning disable 108 // Disable "CS0108 '{derivedDto}.ToJson()' hides inherited member '{dtoBase}.ToJson()'. Use the new keyword if hiding was intended." +#pragma warning disable 114 // Disable "CS0114 '{derivedDto}.RaisePropertyChanged(String)' hides inherited member 'dtoBase.RaisePropertyChanged(String)'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword." +#pragma warning disable 472 // Disable "CS0472 The result of the expression is always 'false' since a value of type 'Int32' is never equal to 'null' of type 'Int32?' +#pragma warning disable 1573 // Disable "CS1573 Parameter '...' has no matching param tag in the XML comment for ... +#pragma warning disable 1591 // Disable "CS1591 Missing XML comment for publicly visible type or member ..." +#pragma warning disable 8073 // Disable "CS8073 The result of the expression is always 'false' since a value of type 'T' is never equal to 'null' of type 'T?'" +#pragma warning disable 3016 // Disable "CS3016 Arrays as attribute arguments is not CLS-compliant" +#pragma warning disable 8603 // Disable "CS8603 Possible null reference return" + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient +{ + using System = global::System; + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial interface ITenantsClient : IApiService + { + /// + /// Get a list of all tenants. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetListAsync(); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get a list of all tenants. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetListAsync(System.Threading.CancellationToken cancellationToken); + + /// + /// Create a new tenant. + /// + /// A server side error occurred. + System.Threading.Tasks.Task CreateAsync(CreateTenantRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Create a new tenant. + /// + /// A server side error occurred. + System.Threading.Tasks.Task CreateAsync(CreateTenantRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Get tenant details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetAsync(string? id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get tenant details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetAsync(string? id, System.Threading.CancellationToken cancellationToken); + + /// + /// Activate a tenant. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ActivateAsync(string? id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Activate a tenant. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ActivateAsync(string? id, System.Threading.CancellationToken cancellationToken); + + /// + /// Deactivate a tenant. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeactivateAsync(string? id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Deactivate a tenant. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeactivateAsync(string? id, System.Threading.CancellationToken cancellationToken); + + /// + /// Upgrade a tenant's subscription. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpgradeSubscriptionAsync(string? id, UpgradeSubscriptionRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Upgrade a tenant's subscription. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpgradeSubscriptionAsync(string? id, UpgradeSubscriptionRequest request, System.Threading.CancellationToken cancellationToken); + + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class TenantsClient : ITenantsClient + { + private System.Net.Http.HttpClient _httpClient; + private System.Lazy _settings; + + public TenantsClient(System.Net.Http.HttpClient httpClient) + { + _httpClient = httpClient; + _settings = new System.Lazy(CreateSerializerSettings); + } + + private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() + { + var settings = new Newtonsoft.Json.JsonSerializerSettings(); + UpdateJsonSerializerSettings(settings); + return settings; + } + + protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } + + partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings); + + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url); + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder); + partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response); + + /// + /// Get a list of all tenants. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task> GetListAsync() + { + return GetListAsync(System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get a list of all tenants. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task> GetListAsync(System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/tenants"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync>(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Create a new tenant. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task CreateAsync(CreateTenantRequest request) + { + return CreateAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Create a new tenant. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task CreateAsync(CreateTenantRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/tenants"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get tenant details. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetAsync(string? id) + { + return GetAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get tenant details. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetAsync(string? id, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/tenants/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Activate a tenant. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task ActivateAsync(string? id) + { + return ActivateAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Activate a tenant. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task ActivateAsync(string? id, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/tenants/{id}/activate"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Content = new System.Net.Http.StringContent(string.Empty, System.Text.Encoding.UTF8, "application/json"); + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Deactivate a tenant. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task DeactivateAsync(string? id) + { + return DeactivateAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Deactivate a tenant. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task DeactivateAsync(string? id, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/tenants/{id}/deactivate"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Content = new System.Net.Http.StringContent(string.Empty, System.Text.Encoding.UTF8, "application/json"); + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Upgrade a tenant's subscription. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task UpgradeSubscriptionAsync(string? id, UpgradeSubscriptionRequest request) + { + return UpgradeSubscriptionAsync(id, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Upgrade a tenant's subscription. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task UpgradeSubscriptionAsync(string? id, UpgradeSubscriptionRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/tenants/{id}/upgrade"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + protected struct ObjectResponseResult + { + public ObjectResponseResult(T responseObject, string responseText) + { + this.Object = responseObject; + this.Text = responseText; + } + + public T Object { get; } + + public string Text { get; } + } + + public bool ReadResponseAsString { get; set; } + + protected virtual async System.Threading.Tasks.Task> ReadObjectResponseAsync(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Threading.CancellationToken cancellationToken) + { + if (response == null || response.Content == null) + { + return new ObjectResponseResult(default(T)!, string.Empty); + } + + if (ReadResponseAsString) + { + var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + var typedBody = Newtonsoft.Json.JsonConvert.DeserializeObject(responseText, JsonSerializerSettings); + return new ObjectResponseResult(typedBody!, responseText); + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body string as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, responseText, headers, exception); + } + } + else + { + try + { + using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) + using (var streamReader = new System.IO.StreamReader(responseStream)) + using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(streamReader)) + { + var serializer = Newtonsoft.Json.JsonSerializer.Create(JsonSerializerSettings); + var typedBody = serializer.Deserialize(jsonTextReader); + return new ObjectResponseResult(typedBody!, string.Empty); + } + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body stream as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, string.Empty, headers, exception); + } + } + } + + private string ConvertToString(object? value, System.Globalization.CultureInfo cultureInfo) + { + if (value == null) + { + return ""; + } + + if (value is System.Enum) + { + var name = System.Enum.GetName(value.GetType(), value); + if (name != null) + { + var field = System.Reflection.IntrospectionExtensions.GetTypeInfo(value.GetType()).GetDeclaredField(name); + if (field != null) + { + var attribute = System.Reflection.CustomAttributeExtensions.GetCustomAttribute(field, typeof(System.Runtime.Serialization.EnumMemberAttribute)) + as System.Runtime.Serialization.EnumMemberAttribute; + if (attribute != null) + { + return attribute.Value != null ? attribute.Value : name; + } + } + + var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo)); + return converted == null ? string.Empty : converted; + } + } + else if (value is bool) + { + return System.Convert.ToString((bool)value, cultureInfo).ToLowerInvariant(); + } + else if (value is byte[]) + { + return System.Convert.ToBase64String((byte[]) value); + } + else if (value.GetType().IsArray) + { + var array = System.Linq.Enumerable.OfType((System.Array) value); + return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo))); + } + + var result = System.Convert.ToString(value, cultureInfo); + return result == null ? "" : result; + } + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial interface IRolesClient : IApiService + { + /// + /// Get a list of all roles. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetListAsync(); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get a list of all roles. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetListAsync(System.Threading.CancellationToken cancellationToken); + + /// + /// Create or update a role. + /// + /// A server side error occurred. + System.Threading.Tasks.Task RegisterRoleAsync(CreateOrUpdateRoleRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Create or update a role. + /// + /// A server side error occurred. + System.Threading.Tasks.Task RegisterRoleAsync(CreateOrUpdateRoleRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Get role details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetByIdAsync(string? id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get role details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetByIdAsync(string? id, System.Threading.CancellationToken cancellationToken); + + /// + /// Delete a role. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeleteAsync(string? id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Delete a role. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeleteAsync(string? id, System.Threading.CancellationToken cancellationToken); + + /// + /// Get role details with its permissions. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetByIdWithPermissionsAsync(string? id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get role details with its permissions. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetByIdWithPermissionsAsync(string? id, System.Threading.CancellationToken cancellationToken); + + /// + /// Update a role's permissions. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpdatePermissionsAsync(string? id, UpdateRolePermissionsRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update a role's permissions. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpdatePermissionsAsync(string? id, UpdateRolePermissionsRequest request, System.Threading.CancellationToken cancellationToken); + + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class RolesClient : IRolesClient + { + private System.Net.Http.HttpClient _httpClient; + private System.Lazy _settings; + + public RolesClient(System.Net.Http.HttpClient httpClient) + { + _httpClient = httpClient; + _settings = new System.Lazy(CreateSerializerSettings); + } + + private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() + { + var settings = new Newtonsoft.Json.JsonSerializerSettings(); + UpdateJsonSerializerSettings(settings); + return settings; + } + + protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } + + partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings); + + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url); + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder); + partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response); + + /// + /// Get a list of all roles. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task> GetListAsync() + { + return GetListAsync(System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get a list of all roles. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task> GetListAsync(System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/roles"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync>(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Create or update a role. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task RegisterRoleAsync(CreateOrUpdateRoleRequest request) + { + return RegisterRoleAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Create or update a role. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task RegisterRoleAsync(CreateOrUpdateRoleRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/roles"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get role details. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetByIdAsync(string? id) + { + return GetByIdAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get role details. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetByIdAsync(string? id, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/roles/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Delete a role. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task DeleteAsync(string? id) + { + return DeleteAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Delete a role. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task DeleteAsync(string? id, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/roles/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("DELETE"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get role details with its permissions. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetByIdWithPermissionsAsync(string? id) + { + return GetByIdWithPermissionsAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get role details with its permissions. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetByIdWithPermissionsAsync(string? id, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/roles/{id}/permissions"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Update a role's permissions. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task UpdatePermissionsAsync(string? id, UpdateRolePermissionsRequest request) + { + return UpdatePermissionsAsync(id, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update a role's permissions. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task UpdatePermissionsAsync(string? id, UpdateRolePermissionsRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/roles/{id}/permissions"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("PUT"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + protected struct ObjectResponseResult + { + public ObjectResponseResult(T responseObject, string responseText) + { + this.Object = responseObject; + this.Text = responseText; + } + + public T Object { get; } + + public string Text { get; } + } + + public bool ReadResponseAsString { get; set; } + + protected virtual async System.Threading.Tasks.Task> ReadObjectResponseAsync(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Threading.CancellationToken cancellationToken) + { + if (response == null || response.Content == null) + { + return new ObjectResponseResult(default(T)!, string.Empty); + } + + if (ReadResponseAsString) + { + var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + var typedBody = Newtonsoft.Json.JsonConvert.DeserializeObject(responseText, JsonSerializerSettings); + return new ObjectResponseResult(typedBody!, responseText); + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body string as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, responseText, headers, exception); + } + } + else + { + try + { + using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) + using (var streamReader = new System.IO.StreamReader(responseStream)) + using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(streamReader)) + { + var serializer = Newtonsoft.Json.JsonSerializer.Create(JsonSerializerSettings); + var typedBody = serializer.Deserialize(jsonTextReader); + return new ObjectResponseResult(typedBody!, string.Empty); + } + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body stream as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, string.Empty, headers, exception); + } + } + } + + private string ConvertToString(object? value, System.Globalization.CultureInfo cultureInfo) + { + if (value == null) + { + return ""; + } + + if (value is System.Enum) + { + var name = System.Enum.GetName(value.GetType(), value); + if (name != null) + { + var field = System.Reflection.IntrospectionExtensions.GetTypeInfo(value.GetType()).GetDeclaredField(name); + if (field != null) + { + var attribute = System.Reflection.CustomAttributeExtensions.GetCustomAttribute(field, typeof(System.Runtime.Serialization.EnumMemberAttribute)) + as System.Runtime.Serialization.EnumMemberAttribute; + if (attribute != null) + { + return attribute.Value != null ? attribute.Value : name; + } + } + + var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo)); + return converted == null ? string.Empty : converted; + } + } + else if (value is bool) + { + return System.Convert.ToString((bool)value, cultureInfo).ToLowerInvariant(); + } + else if (value is byte[]) + { + return System.Convert.ToBase64String((byte[]) value); + } + else if (value.GetType().IsArray) + { + var array = System.Linq.Enumerable.OfType((System.Array) value); + return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo))); + } + + var result = System.Convert.ToString(value, cultureInfo); + return result == null ? "" : result; + } + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial interface ITokensClient : IApiService + { + /// + /// Request an access token using credentials. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + System.Threading.Tasks.Task GetTokenAsync(string tenant, TokenRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Request an access token using credentials. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + System.Threading.Tasks.Task GetTokenAsync(string tenant, TokenRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Request an access token using a refresh token. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + System.Threading.Tasks.Task RefreshAsync(string tenant, RefreshTokenRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Request an access token using a refresh token. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + System.Threading.Tasks.Task RefreshAsync(string tenant, RefreshTokenRequest request, System.Threading.CancellationToken cancellationToken); + + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class TokensClient : ITokensClient + { + private System.Net.Http.HttpClient _httpClient; + private System.Lazy _settings; + + public TokensClient(System.Net.Http.HttpClient httpClient) + { + _httpClient = httpClient; + _settings = new System.Lazy(CreateSerializerSettings); + } + + private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() + { + var settings = new Newtonsoft.Json.JsonSerializerSettings(); + UpdateJsonSerializerSettings(settings); + return settings; + } + + protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } + + partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings); + + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url); + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder); + partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response); + + /// + /// Request an access token using credentials. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetTokenAsync(string tenant, TokenRequest request) + { + return GetTokenAsync(tenant, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Request an access token using credentials. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetTokenAsync(string tenant, TokenRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/tokens"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + + if (tenant == null) + throw new System.ArgumentNullException("tenant"); + request_.Headers.TryAddWithoutValidation("tenant", ConvertToString(tenant, System.Globalization.CultureInfo.InvariantCulture)); + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Request an access token using a refresh token. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + public virtual System.Threading.Tasks.Task RefreshAsync(string tenant, RefreshTokenRequest request) + { + return RefreshAsync(tenant, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Request an access token using a refresh token. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task RefreshAsync(string tenant, RefreshTokenRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/tokens/refresh"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + + if (tenant == null) + throw new System.ArgumentNullException("tenant"); + request_.Headers.TryAddWithoutValidation("tenant", ConvertToString(tenant, System.Globalization.CultureInfo.InvariantCulture)); + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + protected struct ObjectResponseResult + { + public ObjectResponseResult(T responseObject, string responseText) + { + this.Object = responseObject; + this.Text = responseText; + } + + public T Object { get; } + + public string Text { get; } + } + + public bool ReadResponseAsString { get; set; } + + protected virtual async System.Threading.Tasks.Task> ReadObjectResponseAsync(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Threading.CancellationToken cancellationToken) + { + if (response == null || response.Content == null) + { + return new ObjectResponseResult(default(T)!, string.Empty); + } + + if (ReadResponseAsString) + { + var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + var typedBody = Newtonsoft.Json.JsonConvert.DeserializeObject(responseText, JsonSerializerSettings); + return new ObjectResponseResult(typedBody!, responseText); + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body string as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, responseText, headers, exception); + } + } + else + { + try + { + using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) + using (var streamReader = new System.IO.StreamReader(responseStream)) + using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(streamReader)) + { + var serializer = Newtonsoft.Json.JsonSerializer.Create(JsonSerializerSettings); + var typedBody = serializer.Deserialize(jsonTextReader); + return new ObjectResponseResult(typedBody!, string.Empty); + } + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body stream as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, string.Empty, headers, exception); + } + } + } + + private string ConvertToString(object? value, System.Globalization.CultureInfo cultureInfo) + { + if (value == null) + { + return ""; + } + + if (value is System.Enum) + { + var name = System.Enum.GetName(value.GetType(), value); + if (name != null) + { + var field = System.Reflection.IntrospectionExtensions.GetTypeInfo(value.GetType()).GetDeclaredField(name); + if (field != null) + { + var attribute = System.Reflection.CustomAttributeExtensions.GetCustomAttribute(field, typeof(System.Runtime.Serialization.EnumMemberAttribute)) + as System.Runtime.Serialization.EnumMemberAttribute; + if (attribute != null) + { + return attribute.Value != null ? attribute.Value : name; + } + } + + var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo)); + return converted == null ? string.Empty : converted; + } + } + else if (value is bool) + { + return System.Convert.ToString((bool)value, cultureInfo).ToLowerInvariant(); + } + else if (value is byte[]) + { + return System.Convert.ToBase64String((byte[]) value); + } + else if (value.GetType().IsArray) + { + var array = System.Linq.Enumerable.OfType((System.Array) value); + return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo))); + } + + var result = System.Convert.ToString(value, cultureInfo); + return result == null ? "" : result; + } + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial interface IUsersClient : IApiService + { + /// + /// Get list of all users. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetListAsync(); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get list of all users. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetListAsync(System.Threading.CancellationToken cancellationToken); + + /// + /// Creates a new user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task CreateAsync(CreateUserRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Creates a new user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task CreateAsync(CreateUserRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Get a user's details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetByIdAsync(string? id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get a user's details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetByIdAsync(string? id, System.Threading.CancellationToken cancellationToken); + + /// + /// Get a user's roles. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetRolesAsync(string? id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get a user's roles. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetRolesAsync(string? id, System.Threading.CancellationToken cancellationToken); + + /// + /// Update a user's assigned roles. + /// + /// A server side error occurred. + System.Threading.Tasks.Task AssignRolesAsync(string? id, UserRolesRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update a user's assigned roles. + /// + /// A server side error occurred. + System.Threading.Tasks.Task AssignRolesAsync(string? id, UserRolesRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Anonymous user creates a user. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + System.Threading.Tasks.Task SelfRegisterAsync(string tenant, CreateUserRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Anonymous user creates a user. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + System.Threading.Tasks.Task SelfRegisterAsync(string tenant, CreateUserRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Toggle a user's active status. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ToggleStatusAsync(string? id, ToggleUserStatusRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Toggle a user's active status. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ToggleStatusAsync(string? id, ToggleUserStatusRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Confirm email address for a user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ConfirmEmailAsync(string? tenant, string? userId, string? code); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Confirm email address for a user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ConfirmEmailAsync(string? tenant, string? userId, string? code, System.Threading.CancellationToken cancellationToken); + + /// + /// Confirm phone number for a user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ConfirmPhoneNumberAsync(string? userId, string? code); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Confirm phone number for a user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ConfirmPhoneNumberAsync(string? userId, string? code, System.Threading.CancellationToken cancellationToken); + + /// + /// Request a pasword reset email for a user. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + System.Threading.Tasks.Task ForgotPasswordAsync(string tenant, ForgotPasswordRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Request a pasword reset email for a user. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + System.Threading.Tasks.Task ForgotPasswordAsync(string tenant, ForgotPasswordRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Reset a user's password. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ResetPasswordAsync(ResetPasswordRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Reset a user's password. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ResetPasswordAsync(ResetPasswordRequest request, System.Threading.CancellationToken cancellationToken); + + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UsersClient : IUsersClient + { + private System.Net.Http.HttpClient _httpClient; + private System.Lazy _settings; + + public UsersClient(System.Net.Http.HttpClient httpClient) + { + _httpClient = httpClient; + _settings = new System.Lazy(CreateSerializerSettings); + } + + private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() + { + var settings = new Newtonsoft.Json.JsonSerializerSettings(); + UpdateJsonSerializerSettings(settings); + return settings; + } + + protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } + + partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings); + + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url); + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder); + partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response); + + /// + /// Get list of all users. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task> GetListAsync() + { + return GetListAsync(System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get list of all users. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task> GetListAsync(System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync>(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Creates a new user. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task CreateAsync(CreateUserRequest request) + { + return CreateAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Creates a new user. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task CreateAsync(CreateUserRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get a user's details. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetByIdAsync(string? id) + { + return GetByIdAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get a user's details. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetByIdAsync(string? id, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get a user's roles. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task> GetRolesAsync(string? id) + { + return GetRolesAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get a user's roles. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task> GetRolesAsync(string? id, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users/{id}/roles"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync>(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Update a user's assigned roles. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task AssignRolesAsync(string? id, UserRolesRequest request) + { + return AssignRolesAsync(id, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update a user's assigned roles. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task AssignRolesAsync(string? id, UserRolesRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users/{id}/roles"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Anonymous user creates a user. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + public virtual System.Threading.Tasks.Task SelfRegisterAsync(string tenant, CreateUserRequest request) + { + return SelfRegisterAsync(tenant, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Anonymous user creates a user. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task SelfRegisterAsync(string tenant, CreateUserRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users/self-register"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + + if (tenant == null) + throw new System.ArgumentNullException("tenant"); + request_.Headers.TryAddWithoutValidation("tenant", ConvertToString(tenant, System.Globalization.CultureInfo.InvariantCulture)); + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Toggle a user's active status. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task ToggleStatusAsync(string? id, ToggleUserStatusRequest request) + { + return ToggleStatusAsync(id, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Toggle a user's active status. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task ToggleStatusAsync(string? id, ToggleUserStatusRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users/{id}/toggle-status"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + return; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Confirm email address for a user. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task ConfirmEmailAsync(string? tenant, string? userId, string? code) + { + return ConfirmEmailAsync(tenant, userId, code, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Confirm email address for a user. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task ConfirmEmailAsync(string? tenant, string? userId, string? code, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users/confirm-email?"); + if (tenant != null) + { + urlBuilder_.Append(System.Uri.EscapeDataString("tenant") + "=").Append(System.Uri.EscapeDataString(ConvertToString(tenant, System.Globalization.CultureInfo.InvariantCulture))).Append("&"); + } + if (userId != null) + { + urlBuilder_.Append(System.Uri.EscapeDataString("userId") + "=").Append(System.Uri.EscapeDataString(ConvertToString(userId, System.Globalization.CultureInfo.InvariantCulture))).Append("&"); + } + if (code != null) + { + urlBuilder_.Append(System.Uri.EscapeDataString("code") + "=").Append(System.Uri.EscapeDataString(ConvertToString(code, System.Globalization.CultureInfo.InvariantCulture))).Append("&"); + } + urlBuilder_.Length--; + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Confirm phone number for a user. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task ConfirmPhoneNumberAsync(string? userId, string? code) + { + return ConfirmPhoneNumberAsync(userId, code, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Confirm phone number for a user. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task ConfirmPhoneNumberAsync(string? userId, string? code, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users/confirm-phone-number?"); + if (userId != null) + { + urlBuilder_.Append(System.Uri.EscapeDataString("userId") + "=").Append(System.Uri.EscapeDataString(ConvertToString(userId, System.Globalization.CultureInfo.InvariantCulture))).Append("&"); + } + if (code != null) + { + urlBuilder_.Append(System.Uri.EscapeDataString("code") + "=").Append(System.Uri.EscapeDataString(ConvertToString(code, System.Globalization.CultureInfo.InvariantCulture))).Append("&"); + } + urlBuilder_.Length--; + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Request a pasword reset email for a user. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + public virtual System.Threading.Tasks.Task ForgotPasswordAsync(string tenant, ForgotPasswordRequest request) + { + return ForgotPasswordAsync(tenant, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Request a pasword reset email for a user. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task ForgotPasswordAsync(string tenant, ForgotPasswordRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users/forgot-password"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + + if (tenant == null) + throw new System.ArgumentNullException("tenant"); + request_.Headers.TryAddWithoutValidation("tenant", ConvertToString(tenant, System.Globalization.CultureInfo.InvariantCulture)); + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Reset a user's password. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task ResetPasswordAsync(ResetPasswordRequest request) + { + return ResetPasswordAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Reset a user's password. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task ResetPasswordAsync(ResetPasswordRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users/reset-password"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + protected struct ObjectResponseResult + { + public ObjectResponseResult(T responseObject, string responseText) + { + this.Object = responseObject; + this.Text = responseText; + } + + public T Object { get; } + + public string Text { get; } + } + + public bool ReadResponseAsString { get; set; } + + protected virtual async System.Threading.Tasks.Task> ReadObjectResponseAsync(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Threading.CancellationToken cancellationToken) + { + if (response == null || response.Content == null) + { + return new ObjectResponseResult(default(T)!, string.Empty); + } + + if (ReadResponseAsString) + { + var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + var typedBody = Newtonsoft.Json.JsonConvert.DeserializeObject(responseText, JsonSerializerSettings); + return new ObjectResponseResult(typedBody!, responseText); + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body string as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, responseText, headers, exception); + } + } + else + { + try + { + using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) + using (var streamReader = new System.IO.StreamReader(responseStream)) + using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(streamReader)) + { + var serializer = Newtonsoft.Json.JsonSerializer.Create(JsonSerializerSettings); + var typedBody = serializer.Deserialize(jsonTextReader); + return new ObjectResponseResult(typedBody!, string.Empty); + } + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body stream as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, string.Empty, headers, exception); + } + } + } + + private string ConvertToString(object? value, System.Globalization.CultureInfo cultureInfo) + { + if (value == null) + { + return ""; + } + + if (value is System.Enum) + { + var name = System.Enum.GetName(value.GetType(), value); + if (name != null) + { + var field = System.Reflection.IntrospectionExtensions.GetTypeInfo(value.GetType()).GetDeclaredField(name); + if (field != null) + { + var attribute = System.Reflection.CustomAttributeExtensions.GetCustomAttribute(field, typeof(System.Runtime.Serialization.EnumMemberAttribute)) + as System.Runtime.Serialization.EnumMemberAttribute; + if (attribute != null) + { + return attribute.Value != null ? attribute.Value : name; + } + } + + var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo)); + return converted == null ? string.Empty : converted; + } + } + else if (value is bool) + { + return System.Convert.ToString((bool)value, cultureInfo).ToLowerInvariant(); + } + else if (value is byte[]) + { + return System.Convert.ToBase64String((byte[]) value); + } + else if (value.GetType().IsArray) + { + var array = System.Linq.Enumerable.OfType((System.Array) value); + return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo))); + } + + var result = System.Convert.ToString(value, cultureInfo); + return result == null ? "" : result; + } + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial interface IPersonalClient : IApiService + { + /// + /// Get profile details of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetProfileAsync(); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get profile details of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetProfileAsync(System.Threading.CancellationToken cancellationToken); + + /// + /// Update profile details of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpdateProfileAsync(UpdateUserRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update profile details of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpdateProfileAsync(UpdateUserRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Change password of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ChangePasswordAsync(ChangePasswordRequest model); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Change password of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ChangePasswordAsync(ChangePasswordRequest model, System.Threading.CancellationToken cancellationToken); + + /// + /// Get permissions of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetPermissionsAsync(); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get permissions of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetPermissionsAsync(System.Threading.CancellationToken cancellationToken); + + /// + /// Get audit logs of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetLogsAsync(); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get audit logs of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetLogsAsync(System.Threading.CancellationToken cancellationToken); + + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class PersonalClient : IPersonalClient + { + private System.Net.Http.HttpClient _httpClient; + private System.Lazy _settings; + + public PersonalClient(System.Net.Http.HttpClient httpClient) + { + _httpClient = httpClient; + _settings = new System.Lazy(CreateSerializerSettings); + } + + private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() + { + var settings = new Newtonsoft.Json.JsonSerializerSettings(); + UpdateJsonSerializerSettings(settings); + return settings; + } + + protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } + + partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings); + + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url); + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder); + partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response); + + /// + /// Get profile details of currently logged in user. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetProfileAsync() + { + return GetProfileAsync(System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get profile details of currently logged in user. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetProfileAsync(System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/personal/profile"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Update profile details of currently logged in user. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task UpdateProfileAsync(UpdateUserRequest request) + { + return UpdateProfileAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update profile details of currently logged in user. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task UpdateProfileAsync(UpdateUserRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/personal/profile"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("PUT"); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + return; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Change password of currently logged in user. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task ChangePasswordAsync(ChangePasswordRequest model) + { + return ChangePasswordAsync(model, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Change password of currently logged in user. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task ChangePasswordAsync(ChangePasswordRequest model, System.Threading.CancellationToken cancellationToken) + { + if (model == null) + throw new System.ArgumentNullException("model"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/personal/change-password"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(model, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("PUT"); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + return; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get permissions of currently logged in user. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task> GetPermissionsAsync() + { + return GetPermissionsAsync(System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get permissions of currently logged in user. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task> GetPermissionsAsync(System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/personal/permissions"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync>(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get audit logs of currently logged in user. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task> GetLogsAsync() + { + return GetLogsAsync(System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get audit logs of currently logged in user. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task> GetLogsAsync(System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/personal/logs"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync>(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + protected struct ObjectResponseResult + { + public ObjectResponseResult(T responseObject, string responseText) + { + this.Object = responseObject; + this.Text = responseText; + } + + public T Object { get; } + + public string Text { get; } + } + + public bool ReadResponseAsString { get; set; } + + protected virtual async System.Threading.Tasks.Task> ReadObjectResponseAsync(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Threading.CancellationToken cancellationToken) + { + if (response == null || response.Content == null) + { + return new ObjectResponseResult(default(T)!, string.Empty); + } + + if (ReadResponseAsString) + { + var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + var typedBody = Newtonsoft.Json.JsonConvert.DeserializeObject(responseText, JsonSerializerSettings); + return new ObjectResponseResult(typedBody!, responseText); + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body string as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, responseText, headers, exception); + } + } + else + { + try + { + using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) + using (var streamReader = new System.IO.StreamReader(responseStream)) + using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(streamReader)) + { + var serializer = Newtonsoft.Json.JsonSerializer.Create(JsonSerializerSettings); + var typedBody = serializer.Deserialize(jsonTextReader); + return new ObjectResponseResult(typedBody!, string.Empty); + } + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body stream as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, string.Empty, headers, exception); + } + } + } + + private string ConvertToString(object? value, System.Globalization.CultureInfo cultureInfo) + { + if (value == null) + { + return ""; + } + + if (value is System.Enum) + { + var name = System.Enum.GetName(value.GetType(), value); + if (name != null) + { + var field = System.Reflection.IntrospectionExtensions.GetTypeInfo(value.GetType()).GetDeclaredField(name); + if (field != null) + { + var attribute = System.Reflection.CustomAttributeExtensions.GetCustomAttribute(field, typeof(System.Runtime.Serialization.EnumMemberAttribute)) + as System.Runtime.Serialization.EnumMemberAttribute; + if (attribute != null) + { + return attribute.Value != null ? attribute.Value : name; + } + } + + var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo)); + return converted == null ? string.Empty : converted; + } + } + else if (value is bool) + { + return System.Convert.ToString((bool)value, cultureInfo).ToLowerInvariant(); + } + else if (value is byte[]) + { + return System.Convert.ToBase64String((byte[]) value); + } + else if (value.GetType().IsArray) + { + var array = System.Linq.Enumerable.OfType((System.Array) value); + return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo))); + } + + var result = System.Convert.ToString(value, cultureInfo); + return result == null ? "" : result; + } + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial interface IDashboardClient : IApiService + { + /// + /// Get statistics for the dashboard. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetAsync(); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get statistics for the dashboard. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetAsync(System.Threading.CancellationToken cancellationToken); + + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class DashboardClient : IDashboardClient + { + private System.Net.Http.HttpClient _httpClient; + private System.Lazy _settings; + + public DashboardClient(System.Net.Http.HttpClient httpClient) + { + _httpClient = httpClient; + _settings = new System.Lazy(CreateSerializerSettings); + } + + private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() + { + var settings = new Newtonsoft.Json.JsonSerializerSettings(); + UpdateJsonSerializerSettings(settings); + return settings; + } + + protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } + + partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings); + + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url); + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder); + partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response); + + /// + /// Get statistics for the dashboard. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetAsync() + { + return GetAsync(System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get statistics for the dashboard. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetAsync(System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/dashboard"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + protected struct ObjectResponseResult + { + public ObjectResponseResult(T responseObject, string responseText) + { + this.Object = responseObject; + this.Text = responseText; + } + + public T Object { get; } + + public string Text { get; } + } + + public bool ReadResponseAsString { get; set; } + + protected virtual async System.Threading.Tasks.Task> ReadObjectResponseAsync(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Threading.CancellationToken cancellationToken) + { + if (response == null || response.Content == null) + { + return new ObjectResponseResult(default(T)!, string.Empty); + } + + if (ReadResponseAsString) + { + var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + var typedBody = Newtonsoft.Json.JsonConvert.DeserializeObject(responseText, JsonSerializerSettings); + return new ObjectResponseResult(typedBody!, responseText); + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body string as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, responseText, headers, exception); + } + } + else + { + try + { + using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) + using (var streamReader = new System.IO.StreamReader(responseStream)) + using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(streamReader)) + { + var serializer = Newtonsoft.Json.JsonSerializer.Create(JsonSerializerSettings); + var typedBody = serializer.Deserialize(jsonTextReader); + return new ObjectResponseResult(typedBody!, string.Empty); + } + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body stream as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, string.Empty, headers, exception); + } + } + } + + private string ConvertToString(object? value, System.Globalization.CultureInfo cultureInfo) + { + if (value == null) + { + return ""; + } + + if (value is System.Enum) + { + var name = System.Enum.GetName(value.GetType(), value); + if (name != null) + { + var field = System.Reflection.IntrospectionExtensions.GetTypeInfo(value.GetType()).GetDeclaredField(name); + if (field != null) + { + var attribute = System.Reflection.CustomAttributeExtensions.GetCustomAttribute(field, typeof(System.Runtime.Serialization.EnumMemberAttribute)) + as System.Runtime.Serialization.EnumMemberAttribute; + if (attribute != null) + { + return attribute.Value != null ? attribute.Value : name; + } + } + + var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo)); + return converted == null ? string.Empty : converted; + } + } + else if (value is bool) + { + return System.Convert.ToString((bool)value, cultureInfo).ToLowerInvariant(); + } + else if (value is byte[]) + { + return System.Convert.ToBase64String((byte[]) value); + } + else if (value.GetType().IsArray) + { + var array = System.Linq.Enumerable.OfType((System.Array) value); + return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo))); + } + + var result = System.Convert.ToString(value, cultureInfo); + return result == null ? "" : result; + } + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial interface IBrandsClient : IApiService + { + /// + /// Search brands using available filters. + /// + /// A server side error occurred. + System.Threading.Tasks.Task SearchAsync(SearchBrandsRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Search brands using available filters. + /// + /// A server side error occurred. + System.Threading.Tasks.Task SearchAsync(SearchBrandsRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Get brand details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetAsync(System.Guid id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get brand details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetAsync(System.Guid id, System.Threading.CancellationToken cancellationToken); + + /// + /// Update a brand. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpdateAsync(System.Guid id, UpdateBrandRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update a brand. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpdateAsync(System.Guid id, UpdateBrandRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Delete a brand. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeleteAsync(System.Guid id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Delete a brand. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeleteAsync(System.Guid id, System.Threading.CancellationToken cancellationToken); + + /// + /// Create a new brand. + /// + /// A server side error occurred. + System.Threading.Tasks.Task CreateAsync(CreateBrandRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Create a new brand. + /// + /// A server side error occurred. + System.Threading.Tasks.Task CreateAsync(CreateBrandRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Generate a number of random brands. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GenerateRandomAsync(GenerateRandomBrandRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Generate a number of random brands. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GenerateRandomAsync(GenerateRandomBrandRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Delete the brands generated with the generate-random call. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeleteRandomAsync(); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Delete the brands generated with the generate-random call. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeleteRandomAsync(System.Threading.CancellationToken cancellationToken); + + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class BrandsClient : IBrandsClient + { + private System.Net.Http.HttpClient _httpClient; + private System.Lazy _settings; + + public BrandsClient(System.Net.Http.HttpClient httpClient) + { + _httpClient = httpClient; + _settings = new System.Lazy(CreateSerializerSettings); + } + + private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() + { + var settings = new Newtonsoft.Json.JsonSerializerSettings(); + UpdateJsonSerializerSettings(settings); + return settings; + } + + protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } + + partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings); + + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url); + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder); + partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response); + + /// + /// Search brands using available filters. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task SearchAsync(SearchBrandsRequest request) + { + return SearchAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Search brands using available filters. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task SearchAsync(SearchBrandsRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/brands/search"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get brand details. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetAsync(System.Guid id) + { + return GetAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get brand details. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetAsync(System.Guid id, System.Threading.CancellationToken cancellationToken) + { + if (id == null) + throw new System.ArgumentNullException("id"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/brands/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Update a brand. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task UpdateAsync(System.Guid id, UpdateBrandRequest request) + { + return UpdateAsync(id, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update a brand. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task UpdateAsync(System.Guid id, UpdateBrandRequest request, System.Threading.CancellationToken cancellationToken) + { + if (id == null) + throw new System.ArgumentNullException("id"); + + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/brands/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("PUT"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Delete a brand. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task DeleteAsync(System.Guid id) + { + return DeleteAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Delete a brand. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task DeleteAsync(System.Guid id, System.Threading.CancellationToken cancellationToken) + { + if (id == null) + throw new System.ArgumentNullException("id"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/brands/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("DELETE"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Create a new brand. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task CreateAsync(CreateBrandRequest request) + { + return CreateAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Create a new brand. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task CreateAsync(CreateBrandRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/brands"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Generate a number of random brands. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GenerateRandomAsync(GenerateRandomBrandRequest request) + { + return GenerateRandomAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Generate a number of random brands. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GenerateRandomAsync(GenerateRandomBrandRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/brands/generate-random"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Delete the brands generated with the generate-random call. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task DeleteRandomAsync() + { + return DeleteRandomAsync(System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Delete the brands generated with the generate-random call. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task DeleteRandomAsync(System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/brands/delete-random"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("DELETE"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + protected struct ObjectResponseResult + { + public ObjectResponseResult(T responseObject, string responseText) + { + this.Object = responseObject; + this.Text = responseText; + } + + public T Object { get; } + + public string Text { get; } + } + + public bool ReadResponseAsString { get; set; } + + protected virtual async System.Threading.Tasks.Task> ReadObjectResponseAsync(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Threading.CancellationToken cancellationToken) + { + if (response == null || response.Content == null) + { + return new ObjectResponseResult(default(T)!, string.Empty); + } + + if (ReadResponseAsString) + { + var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + var typedBody = Newtonsoft.Json.JsonConvert.DeserializeObject(responseText, JsonSerializerSettings); + return new ObjectResponseResult(typedBody!, responseText); + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body string as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, responseText, headers, exception); + } + } + else + { + try + { + using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) + using (var streamReader = new System.IO.StreamReader(responseStream)) + using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(streamReader)) + { + var serializer = Newtonsoft.Json.JsonSerializer.Create(JsonSerializerSettings); + var typedBody = serializer.Deserialize(jsonTextReader); + return new ObjectResponseResult(typedBody!, string.Empty); + } + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body stream as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, string.Empty, headers, exception); + } + } + } + + private string ConvertToString(object? value, System.Globalization.CultureInfo cultureInfo) + { + if (value == null) + { + return ""; + } + + if (value is System.Enum) + { + var name = System.Enum.GetName(value.GetType(), value); + if (name != null) + { + var field = System.Reflection.IntrospectionExtensions.GetTypeInfo(value.GetType()).GetDeclaredField(name); + if (field != null) + { + var attribute = System.Reflection.CustomAttributeExtensions.GetCustomAttribute(field, typeof(System.Runtime.Serialization.EnumMemberAttribute)) + as System.Runtime.Serialization.EnumMemberAttribute; + if (attribute != null) + { + return attribute.Value != null ? attribute.Value : name; + } + } + + var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo)); + return converted == null ? string.Empty : converted; + } + } + else if (value is bool) + { + return System.Convert.ToString((bool)value, cultureInfo).ToLowerInvariant(); + } + else if (value is byte[]) + { + return System.Convert.ToBase64String((byte[]) value); + } + else if (value.GetType().IsArray) + { + var array = System.Linq.Enumerable.OfType((System.Array) value); + return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo))); + } + + var result = System.Convert.ToString(value, cultureInfo); + return result == null ? "" : result; + } + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial interface IProductsClient : IApiService + { + /// + /// Search products using available filters. + /// + /// A server side error occurred. + System.Threading.Tasks.Task SearchAsync(SearchProductsRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Search products using available filters. + /// + /// A server side error occurred. + System.Threading.Tasks.Task SearchAsync(SearchProductsRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Get product details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetAsync(System.Guid id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get product details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetAsync(System.Guid id, System.Threading.CancellationToken cancellationToken); + + /// + /// Update a product. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpdateAsync(System.Guid id, UpdateProductRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update a product. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpdateAsync(System.Guid id, UpdateProductRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Delete a product. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeleteAsync(System.Guid id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Delete a product. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeleteAsync(System.Guid id, System.Threading.CancellationToken cancellationToken); + + /// + /// Get product details via dapper. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetDapperAsync(System.Guid? id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get product details via dapper. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetDapperAsync(System.Guid? id, System.Threading.CancellationToken cancellationToken); + + /// + /// Create a new product. + /// + /// A server side error occurred. + System.Threading.Tasks.Task CreateAsync(CreateProductRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Create a new product. + /// + /// A server side error occurred. + System.Threading.Tasks.Task CreateAsync(CreateProductRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Export a products. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ExportAsync(ExportProductsRequest filter); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Export a products. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ExportAsync(ExportProductsRequest filter, System.Threading.CancellationToken cancellationToken); + + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ProductsClient : IProductsClient + { + private System.Net.Http.HttpClient _httpClient; + private System.Lazy _settings; + + public ProductsClient(System.Net.Http.HttpClient httpClient) + { + _httpClient = httpClient; + _settings = new System.Lazy(CreateSerializerSettings); + } + + private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() + { + var settings = new Newtonsoft.Json.JsonSerializerSettings(); + UpdateJsonSerializerSettings(settings); + return settings; + } + + protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } + + partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings); + + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url); + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder); + partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response); + + /// + /// Search products using available filters. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task SearchAsync(SearchProductsRequest request) + { + return SearchAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Search products using available filters. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task SearchAsync(SearchProductsRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/products/search"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get product details. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetAsync(System.Guid id) + { + return GetAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get product details. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetAsync(System.Guid id, System.Threading.CancellationToken cancellationToken) + { + if (id == null) + throw new System.ArgumentNullException("id"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/products/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Update a product. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task UpdateAsync(System.Guid id, UpdateProductRequest request) + { + return UpdateAsync(id, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update a product. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task UpdateAsync(System.Guid id, UpdateProductRequest request, System.Threading.CancellationToken cancellationToken) + { + if (id == null) + throw new System.ArgumentNullException("id"); + + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/products/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("PUT"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Delete a product. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task DeleteAsync(System.Guid id) + { + return DeleteAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Delete a product. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task DeleteAsync(System.Guid id, System.Threading.CancellationToken cancellationToken) + { + if (id == null) + throw new System.ArgumentNullException("id"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/products/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("DELETE"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get product details via dapper. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetDapperAsync(System.Guid? id) + { + return GetDapperAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get product details via dapper. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetDapperAsync(System.Guid? id, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/products/dapper?"); + if (id != null) + { + urlBuilder_.Append(System.Uri.EscapeDataString("id") + "=").Append(System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))).Append("&"); + } + urlBuilder_.Length--; + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Create a new product. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task CreateAsync(CreateProductRequest request) + { + return CreateAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Create a new product. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task CreateAsync(CreateProductRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/products"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Export a products. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task ExportAsync(ExportProductsRequest filter) + { + return ExportAsync(filter, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Export a products. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task ExportAsync(ExportProductsRequest filter, System.Threading.CancellationToken cancellationToken) + { + if (filter == null) + throw new System.ArgumentNullException("filter"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/products/export"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(filter, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/octet-stream")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200 || status_ == 206) + { + var responseStream_ = response_.Content == null ? System.IO.Stream.Null : await response_.Content.ReadAsStreamAsync().ConfigureAwait(false); + var fileResponse_ = new FileResponse(status_, headers_, responseStream_, null, response_); + disposeClient_ = false; disposeResponse_ = false; // response and client are disposed by FileResponse + return fileResponse_; + } + else + { + var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false); + throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + protected struct ObjectResponseResult + { + public ObjectResponseResult(T responseObject, string responseText) + { + this.Object = responseObject; + this.Text = responseText; + } + + public T Object { get; } + + public string Text { get; } + } + + public bool ReadResponseAsString { get; set; } + + protected virtual async System.Threading.Tasks.Task> ReadObjectResponseAsync(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Threading.CancellationToken cancellationToken) + { + if (response == null || response.Content == null) + { + return new ObjectResponseResult(default(T)!, string.Empty); + } + + if (ReadResponseAsString) + { + var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + var typedBody = Newtonsoft.Json.JsonConvert.DeserializeObject(responseText, JsonSerializerSettings); + return new ObjectResponseResult(typedBody!, responseText); + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body string as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, responseText, headers, exception); + } + } + else + { + try + { + using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) + using (var streamReader = new System.IO.StreamReader(responseStream)) + using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(streamReader)) + { + var serializer = Newtonsoft.Json.JsonSerializer.Create(JsonSerializerSettings); + var typedBody = serializer.Deserialize(jsonTextReader); + return new ObjectResponseResult(typedBody!, string.Empty); + } + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body stream as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, string.Empty, headers, exception); + } + } + } + + private string ConvertToString(object? value, System.Globalization.CultureInfo cultureInfo) + { + if (value == null) + { + return ""; + } + + if (value is System.Enum) + { + var name = System.Enum.GetName(value.GetType(), value); + if (name != null) + { + var field = System.Reflection.IntrospectionExtensions.GetTypeInfo(value.GetType()).GetDeclaredField(name); + if (field != null) + { + var attribute = System.Reflection.CustomAttributeExtensions.GetCustomAttribute(field, typeof(System.Runtime.Serialization.EnumMemberAttribute)) + as System.Runtime.Serialization.EnumMemberAttribute; + if (attribute != null) + { + return attribute.Value != null ? attribute.Value : name; + } + } + + var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo)); + return converted == null ? string.Empty : converted; + } + } + else if (value is bool) + { + return System.Convert.ToString((bool)value, cultureInfo).ToLowerInvariant(); + } + else if (value is byte[]) + { + return System.Convert.ToBase64String((byte[]) value); + } + else if (value.GetType().IsArray) + { + var array = System.Linq.Enumerable.OfType((System.Array) value); + return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo))); + } + + var result = System.Convert.ToString(value, cultureInfo); + return result == null ? "" : result; + } + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class TenantDto + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("connectionString", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? ConnectionString { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("adminEmail", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string AdminEmail { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("isActive", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool IsActive { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("validUpto", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime ValidUpto { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("issuer", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Issuer { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class HttpValidationProblemDetails : ProblemDetails + { + [Newtonsoft.Json.JsonProperty("errors", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.IDictionary> Errors { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ProblemDetails + { + [Newtonsoft.Json.JsonProperty("type", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Type { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("title", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Title { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("status", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int? Status { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("detail", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Detail { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("instance", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Instance { get; set; } = default!; + + private System.Collections.Generic.IDictionary _additionalProperties = new System.Collections.Generic.Dictionary(); + + [Newtonsoft.Json.JsonExtensionData] + public System.Collections.Generic.IDictionary AdditionalProperties + { + get { return _additionalProperties; } + set { _additionalProperties = value; } + } + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ErrorResult + { + [Newtonsoft.Json.JsonProperty("messages", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection? Messages { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("source", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Source { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("exception", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Exception { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("errorId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? ErrorId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("supportMessage", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? SupportMessage { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("statusCode", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int StatusCode { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class CreateTenantRequest + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("connectionString", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? ConnectionString { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("adminEmail", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.RegularExpression(@"^[^@]+@[^@]+$")] + public string AdminEmail { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("issuer", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Issuer { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UpgradeSubscriptionRequest + { + [Newtonsoft.Json.JsonProperty("tenantId", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string TenantId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("extendedExpiryDate", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime ExtendedExpiryDate { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class RoleDto + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("permissions", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection? Permissions { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UpdateRolePermissionsRequest + { + [Newtonsoft.Json.JsonProperty("roleId", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string RoleId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("permissions", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public System.Collections.Generic.ICollection Permissions { get; set; } = new System.Collections.ObjectModel.Collection(); + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class CreateOrUpdateRoleRequest + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class TokenResponse + { + [Newtonsoft.Json.JsonProperty("token", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Token { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("refreshToken", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string RefreshToken { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("refreshTokenExpiryTime", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime RefreshTokenExpiryTime { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class TokenRequest + { + [Newtonsoft.Json.JsonProperty("email", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.RegularExpression(@"^[^@]+@[^@]+$")] + public string Email { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("password", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string Password { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class RefreshTokenRequest + { + [Newtonsoft.Json.JsonProperty("token", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Token { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("refreshToken", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string RefreshToken { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UserDetailsDto + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("userName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? UserName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("firstName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? FirstName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("lastName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? LastName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("email", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Email { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("isActive", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool IsActive { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("emailConfirmed", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool EmailConfirmed { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("phoneNumber", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? PhoneNumber { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("imageUrl", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? ImageUrl { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UserRoleDto + { + [Newtonsoft.Json.JsonProperty("roleId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? RoleId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("roleName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? RoleName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("enabled", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool Enabled { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UserRolesRequest + { + [Newtonsoft.Json.JsonProperty("userRoles", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection UserRoles { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class CreateUserRequest + { + [Newtonsoft.Json.JsonProperty("firstName", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string FirstName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("lastName", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string LastName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("email", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.RegularExpression(@"^[^@]+@[^@]+$")] + public string Email { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("userName", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string UserName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("password", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string Password { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("confirmPassword", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string ConfirmPassword { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("phoneNumber", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? PhoneNumber { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ToggleUserStatusRequest + { + [Newtonsoft.Json.JsonProperty("activateUser", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool ActivateUser { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("userId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? UserId { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ForgotPasswordRequest + { + [Newtonsoft.Json.JsonProperty("email", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.RegularExpression(@"^[^@]+@[^@]+$")] + public string Email { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ResetPasswordRequest + { + [Newtonsoft.Json.JsonProperty("email", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Email { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("password", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Password { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("token", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Token { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UpdateUserRequest + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("firstName", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(75, MinimumLength = 1)] + public string FirstName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("lastName", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(75, MinimumLength = 1)] + public string LastName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("phoneNumber", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? PhoneNumber { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("email", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.RegularExpression(@"^[^@]+@[^@]+$")] + public string Email { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("image", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public FileUploadRequest? Image { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("deleteCurrentImage", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool DeleteCurrentImage { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class FileUploadRequest + { + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(150, MinimumLength = 1)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("extension", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(5, MinimumLength = 1)] + public string Extension { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("data", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string Data { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ChangePasswordRequest + { + [Newtonsoft.Json.JsonProperty("password", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string Password { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("newPassword", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string NewPassword { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("confirmNewPassword", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string ConfirmNewPassword { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class AuditDto + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("userId", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid UserId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("type", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Type { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("tableName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? TableName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("dateTime", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime DateTime { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("oldValues", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? OldValues { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("newValues", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? NewValues { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("affectedColumns", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? AffectedColumns { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("primaryKey", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? PrimaryKey { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class StatsDto + { + [Newtonsoft.Json.JsonProperty("productCount", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int ProductCount { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("brandCount", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int BrandCount { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("userCount", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int UserCount { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("roleCount", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int RoleCount { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("dataEnterBarChart", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection DataEnterBarChart { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("productByBrandTypePieChart", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.IDictionary? ProductByBrandTypePieChart { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ChartSeries + { + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("data", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection? Data { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class PaginationResponseOfBrandDto + { + [Newtonsoft.Json.JsonProperty("data", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection Data { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("currentPage", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int CurrentPage { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("totalPages", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int TotalPages { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("totalCount", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int TotalCount { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("pageSize", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int PageSize { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("hasPreviousPage", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool HasPreviousPage { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("hasNextPage", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool HasNextPage { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class BrandDto + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class SearchBrandsRequest : PaginationFilter + { + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class PaginationFilter : BaseFilter + { + [Newtonsoft.Json.JsonProperty("pageNumber", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int PageNumber { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("pageSize", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int PageSize { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("orderBy", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection? OrderBy { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class BaseFilter + { + /// + /// Column Wise Search is Supported. + /// + [Newtonsoft.Json.JsonProperty("advancedSearch", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public Search? AdvancedSearch { get; set; } = default!; + + /// + /// Keyword to Search in All the available columns of the Resource. + /// + [Newtonsoft.Json.JsonProperty("keyword", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Keyword { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class Search + { + [Newtonsoft.Json.JsonProperty("fields", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection Fields { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("keyword", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Keyword { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class CreateBrandRequest + { + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(75, MinimumLength = 1)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UpdateBrandRequest + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(75, MinimumLength = 1)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class GenerateRandomBrandRequest + { + [Newtonsoft.Json.JsonProperty("nSeed", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int NSeed { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class PaginationResponseOfProductDto + { + [Newtonsoft.Json.JsonProperty("data", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection Data { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("currentPage", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int CurrentPage { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("totalPages", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int TotalPages { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("totalCount", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int TotalCount { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("pageSize", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int PageSize { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("hasPreviousPage", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool HasPreviousPage { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("hasNextPage", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool HasNextPage { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ProductDto + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("rate", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public decimal Rate { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("imagePath", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? ImagePath { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("brandId", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid BrandId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("brandName", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string BrandName { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class SearchProductsRequest : PaginationFilter + { + [Newtonsoft.Json.JsonProperty("brandId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid? BrandId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("minimumRate", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public decimal? MinimumRate { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("maximumRate", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public decimal? MaximumRate { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ProductDetailsDto + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("rate", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public decimal Rate { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("imagePath", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? ImagePath { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("brand", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public BrandDto Brand { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class CreateProductRequest + { + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(75, MinimumLength = 1)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("rate", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + [System.ComponentModel.DataAnnotations.Range(1.0D, double.MaxValue)] + public decimal Rate { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("brandId", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public System.Guid BrandId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("image", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public FileUploadRequest? Image { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UpdateProductRequest + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(75, MinimumLength = 1)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("rate", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + [System.ComponentModel.DataAnnotations.Range(1.0D, double.MaxValue)] + public decimal Rate { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("brandId", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public System.Guid BrandId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("deleteCurrentImage", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool DeleteCurrentImage { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("image", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public FileUploadRequest? Image { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ExportProductsRequest : BaseFilter + { + [Newtonsoft.Json.JsonProperty("brandId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid? BrandId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("minimumRate", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public decimal? MinimumRate { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("maximumRate", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public decimal? MaximumRate { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class FileResponse : System.IDisposable + { + private System.IDisposable? _client; + private System.IDisposable? _response; + + public int StatusCode { get; private set; } + + public System.Collections.Generic.IReadOnlyDictionary> Headers { get; private set; } + + public System.IO.Stream Stream { get; private set; } + + public bool IsPartial + { + get { return StatusCode == 206; } + } + + public FileResponse(int statusCode, System.Collections.Generic.IReadOnlyDictionary> headers, System.IO.Stream stream, System.IDisposable? client, System.IDisposable? response) + { + StatusCode = statusCode; + Headers = headers; + Stream = stream; + _client = client; + _response = response; + } + + public void Dispose() + { + Stream.Dispose(); + if (_response != null) + _response.Dispose(); + if (_client != null) + _client.Dispose(); + } + } + + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ApiException : System.Exception + { + public int StatusCode { get; private set; } + + public string? Response { get; private set; } + + public System.Collections.Generic.IReadOnlyDictionary> Headers { get; private set; } + + public ApiException(string message, int statusCode, string? response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Exception? innerException) + : base(message + "\n\nStatus: " + statusCode + "\nResponse: \n" + ((response == null) ? "(null)" : response.Substring(0, response.Length >= 512 ? 512 : response.Length)), innerException) + { + StatusCode = statusCode; + Response = response; + Headers = headers; + } + + public override string ToString() + { + return string.Format("HTTP Response: \n\n{0}\n\n{1}", Response, base.ToString()); + } + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ApiException : ApiException + { + public TResult Result { get; private set; } + + public ApiException(string message, int statusCode, string? response, System.Collections.Generic.IReadOnlyDictionary> headers, TResult result, System.Exception? innerException) + : base(message, statusCode, response, headers, innerException) + { + Result = result; + } + } + +} + +#pragma warning restore 1591 +#pragma warning restore 1573 +#pragma warning restore 472 +#pragma warning restore 114 +#pragma warning restore 108 +#pragma warning restore 3016 +#pragma warning restore 8603 \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/ApiClient/IApiService.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/ApiClient/IApiService.cs new file mode 100644 index 0000000..424beb4 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/ApiClient/IApiService.cs @@ -0,0 +1,5 @@ +namespace FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; + +public interface IApiService +{ +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/ApiClient/nswag.json b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/ApiClient/nswag.json new file mode 100644 index 0000000..47351c6 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/ApiClient/nswag.json @@ -0,0 +1,100 @@ +{ + "runtime": "Net60", + "defaultVariables": null, + "documentGenerator": { + "fromDocument": { + "json": "", + "url": "https://localhost:5001/swagger/v1/swagger.json", + "output": null, + "newLineBehavior": "Auto" + } + }, + "codeGenerators": { + "openApiToCSharpClient": { + "clientBaseClass": null, + "configurationClass": null, + "generateClientClasses": true, + "generateClientInterfaces": true, + "clientBaseInterface": "IApiService", + "injectHttpClient": true, + "disposeHttpClient": false, + "protectedMethods": [], + "generateExceptionClasses": true, + "exceptionClass": "ApiException", + "wrapDtoExceptions": true, + "useHttpClientCreationMethod": false, + "httpClientType": "System.Net.Http.HttpClient", + "useHttpRequestMessageCreationMethod": false, + "useBaseUrl": false, + "generateBaseUrlProperty": true, + "generateSyncMethods": false, + "generatePrepareRequestAndProcessResponseAsAsyncMethods": false, + "exposeJsonSerializerSettings": false, + "clientClassAccessModifier": "public", + "typeAccessModifier": "public", + "generateContractsOutput": false, + "contractsNamespace": null, + "contractsOutputFilePath": null, + "parameterDateTimeFormat": "s", + "parameterDateFormat": "yyyy-MM-dd", + "generateUpdateJsonSerializerSettingsMethod": true, + "useRequestAndResponseSerializationSettings": false, + "serializeTypeInformation": false, + "queryNullValue": "", + "className": "{controller}Client", + "operationGenerationMode": "MultipleClientsFromOperationId", + "additionalNamespaceUsages": [], + "additionalContractNamespaceUsages": [], + "generateOptionalParameters": false, + "generateJsonMethods": false, + "enforceFlagEnums": false, + "parameterArrayType": "System.Collections.Generic.IEnumerable", + "parameterDictionaryType": "System.Collections.Generic.IDictionary", + "responseArrayType": "System.Collections.Generic.ICollection", + "responseDictionaryType": "System.Collections.Generic.IDictionary", + "wrapResponses": false, + "wrapResponseMethods": [], + "generateResponseClasses": true, + "responseClass": "SwaggerResponse", + "namespace": "FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient", + "requiredPropertiesMustBeDefined": true, + "dateType": "System.DateTimeOffset", + "jsonConverters": null, + "anyType": "object", + "dateTimeType": "System.DateTime", + "timeType": "System.TimeSpan", + "timeSpanType": "System.TimeSpan", + "arrayType": "System.Collections.Generic.ICollection", + "arrayInstanceType": "System.Collections.ObjectModel.Collection", + "dictionaryType": "System.Collections.Generic.IDictionary", + "dictionaryInstanceType": "System.Collections.Generic.Dictionary", + "arrayBaseType": "System.Collections.ObjectModel.Collection", + "dictionaryBaseType": "System.Collections.Generic.Dictionary", + "classStyle": "Poco", + "jsonLibrary": "NewtonsoftJson", + "generateDefaultValues": true, + "generateDataAnnotations": true, + "excludedTypeNames": [], + "excludedParameterNames": [], + "handleReferences": false, + "generateImmutableArrayProperties": false, + "generateImmutableDictionaryProperties": false, + "jsonSerializerSettingsTransformationMethod": null, + "inlineNamedArrays": false, + "inlineNamedDictionaries": false, + "inlineNamedTuples": true, + "inlineNamedAny": false, + "generateDtoTypes": true, + "generateOptionalPropertiesAsNullable": false, + "generateNullableReferenceTypes": true, + "templateDirectory": null, + "typeNameGeneratorType": null, + "propertyNameGeneratorType": null, + "enumNameGeneratorType": null, + "serviceHost": null, + "serviceSchemes": null, + "output": "FSHApi.cs", + "newLineBehavior": "Auto" + } + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/AuthProvider.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/AuthProvider.cs new file mode 100644 index 0000000..c8c739a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/AuthProvider.cs @@ -0,0 +1,7 @@ +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Auth; + +public enum AuthProvider +{ + Jwt, + AzureAd +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/AuthorizationServiceExtensions.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/AuthorizationServiceExtensions.cs new file mode 100644 index 0000000..52fe9d8 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/AuthorizationServiceExtensions.cs @@ -0,0 +1,10 @@ +using FSH.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Authorization; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Auth; + +public static class AuthorizationServiceExtensions +{ + public static async Task HasPermissionAsync(this IAuthorizationService service, ClaimsPrincipal user, string action, string resource) => + (await service.AuthorizeAsync(user, null, FSHPermission.NameFor(action, resource))).Succeeded; +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/AzureAd/AzureAdAuthenticationService.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/AzureAd/AzureAdAuthenticationService.cs new file mode 100644 index 0000000..dcb9bf5 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/AzureAd/AzureAdAuthenticationService.cs @@ -0,0 +1,34 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Auth.AzureAd; + +internal class AzureAdAuthenticationService : IAuthenticationService +{ + private readonly SignOutSessionStateManager _signOut; + private readonly NavigationManager _navigation; + + public AzureAdAuthenticationService(SignOutSessionStateManager signOut, NavigationManager navigation) => + (_signOut, _navigation) = (signOut, navigation); + + public AuthProvider ProviderType => AuthProvider.AzureAd; + + public void NavigateToExternalLogin(string returnUrl) => + _navigation.NavigateTo($"authentication/login?returnUrl={Uri.EscapeDataString(returnUrl)}"); + + public Task LoginAsync(string tenantId, TokenRequest request) => + throw new NotImplementedException(); + + public async Task LogoutAsync() + { + await _signOut.SetSignOutState(); + _navigation.NavigateTo("authentication/logout"); + } + + public Task ReLoginAsync(string returnUrl) + { + NavigateToExternalLogin(returnUrl); + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/AzureAd/AzureAdAuthorizationMessageHandler.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/AzureAd/AzureAdAuthorizationMessageHandler.cs new file mode 100644 index 0000000..d9177a1 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/AzureAd/AzureAdAuthorizationMessageHandler.cs @@ -0,0 +1,12 @@ +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Auth.AzureAd; + +public class AzureAdAuthorizationMessageHandler : AuthorizationMessageHandler +{ + public AzureAdAuthorizationMessageHandler(IAccessTokenProvider provider, NavigationManager navigation, IConfiguration config) + : base(provider, navigation) => ConfigureHandler( + new[] { config[ConfigNames.ApiBaseUrl] }, + new[] { config[$"{nameof(AuthProvider.AzureAd)}:{ConfigNames.ApiScope}"] }); +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/AzureAd/AzureAdClaimsPrincipalFactory.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/AzureAd/AzureAdClaimsPrincipalFactory.cs new file mode 100644 index 0000000..22e869c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/AzureAd/AzureAdClaimsPrincipalFactory.cs @@ -0,0 +1,73 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using FSH.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication.Internal; +using Microsoft.Extensions.DependencyInjection; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Auth.AzureAd; + +internal class AzureAdClaimsPrincipalFactory : AccountClaimsPrincipalFactory +{ + // Can't work with actual services in the constructor here, have to + // use IServiceProvider, otherwise the app hangs at startup. + // The culprit is probably HttpClient, as this class is instantiated + // at startup while the HttpClient is being (or not even) created. + private readonly IServiceProvider _services; + + public AzureAdClaimsPrincipalFactory(IAccessTokenProviderAccessor accessor, IServiceProvider services) + : base(accessor) => + _services = services; + + public override async ValueTask CreateUserAsync(RemoteUserAccount account, RemoteAuthenticationUserOptions options) + { + var principal = await base.CreateUserAsync(account, options); + + if (principal.Identity?.IsAuthenticated is true) + { + var userDetails = await _services.GetRequiredService().GetProfileAsync(); + + var userIdentity = (ClaimsIdentity)principal.Identity; + + if (!string.IsNullOrWhiteSpace(userDetails.Email) && !userIdentity.HasClaim(c => c.Type == ClaimTypes.Email)) + { + userIdentity.AddClaim(new Claim(ClaimTypes.Email, userDetails.Email)); + } + + if (!string.IsNullOrWhiteSpace(userDetails.PhoneNumber) && !userIdentity.HasClaim(c => c.Type == ClaimTypes.MobilePhone)) + { + userIdentity.AddClaim(new Claim(ClaimTypes.MobilePhone, userDetails.PhoneNumber)); + } + + if (!string.IsNullOrWhiteSpace(userDetails.FirstName) && !userIdentity.HasClaim(c => c.Type == ClaimTypes.Name)) + { + userIdentity.AddClaim(new Claim(ClaimTypes.Name, userDetails.FirstName)); + } + + if (!string.IsNullOrWhiteSpace(userDetails.LastName) && !userIdentity.HasClaim(c => c.Type == ClaimTypes.Surname)) + { + userIdentity.AddClaim(new Claim(ClaimTypes.Surname, userDetails.LastName)); + } + + if (!userIdentity.HasClaim(c => c.Type == FSHClaims.Fullname)) + { + userIdentity.AddClaim(new Claim(FSHClaims.Fullname, $"{userDetails.FirstName} {userDetails.LastName}")); + } + + if (!userIdentity.HasClaim(c => c.Type == ClaimTypes.NameIdentifier)) + { + userIdentity.AddClaim(new Claim(ClaimTypes.NameIdentifier, userDetails.Id.ToString())); + } + + if (!string.IsNullOrWhiteSpace(userDetails.ImageUrl) && !userIdentity.HasClaim(c => c.Type == FSHClaims.ImageUrl) && userDetails.ImageUrl is not null) + { + userIdentity.AddClaim(new Claim(FSHClaims.ImageUrl, userDetails.ImageUrl)); + } + + var permissions = await _services.GetRequiredService().GetPermissionsAsync(); + + userIdentity.AddClaims(permissions.Select(permission => new Claim(FSHClaims.Permission, permission))); + } + + return principal; + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/IAuthenticationService.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/IAuthenticationService.cs new file mode 100644 index 0000000..5cef8d4 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/IAuthenticationService.cs @@ -0,0 +1,16 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Auth; + +public interface IAuthenticationService +{ + AuthProvider ProviderType { get; } + + void NavigateToExternalLogin(string returnUrl); + + Task LoginAsync(string tenantId, TokenRequest request); + + Task LogoutAsync(); + + Task ReLoginAsync(string returnUrl); +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/Jwt/AccessTokenProviderAccessor.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/Jwt/AccessTokenProviderAccessor.cs new file mode 100644 index 0000000..83c3ee6 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/Jwt/AccessTokenProviderAccessor.cs @@ -0,0 +1,17 @@ +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication.Internal; +using Microsoft.Extensions.DependencyInjection; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Auth.Jwt; + +internal class AccessTokenProviderAccessor : IAccessTokenProviderAccessor +{ + private readonly IServiceProvider _provider; + private IAccessTokenProvider? _tokenProvider; + + public AccessTokenProviderAccessor(IServiceProvider provider) => + _provider = provider; + + public IAccessTokenProvider TokenProvider => + _tokenProvider ??= _provider.GetRequiredService(); +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/Jwt/JwtAuthenticationHeaderHandler.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/Jwt/JwtAuthenticationHeaderHandler.cs new file mode 100644 index 0000000..69c33f6 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/Jwt/JwtAuthenticationHeaderHandler.cs @@ -0,0 +1,34 @@ +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication.Internal; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Auth.Jwt; + +public class JwtAuthenticationHeaderHandler : DelegatingHandler +{ + private readonly IAccessTokenProviderAccessor _tokenProviderAccessor; + private readonly NavigationManager _navigation; + + public JwtAuthenticationHeaderHandler(IAccessTokenProviderAccessor tokenProviderAccessor, NavigationManager navigation) + { + _tokenProviderAccessor = tokenProviderAccessor; + _navigation = navigation; + } + + protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + { + // skip token endpoints + if (request.RequestUri?.AbsolutePath.Contains("/tokens") is not true) + { + if (await _tokenProviderAccessor.TokenProvider.GetAccessTokenAsync() is string token) + { + request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token); + } + else + { + _navigation.NavigateTo("/login"); + } + } + + return await base.SendAsync(request, cancellationToken); + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/Jwt/JwtAuthenticationService.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/Jwt/JwtAuthenticationService.cs new file mode 100644 index 0000000..5723573 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/Jwt/JwtAuthenticationService.cs @@ -0,0 +1,222 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using FSH.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Auth.Jwt; + +public class JwtAuthenticationService : AuthenticationStateProvider, IAuthenticationService, IAccessTokenProvider +{ + private readonly SemaphoreSlim _semaphore = new(1, 1); + + private readonly ILocalStorageService _localStorage; + private readonly ITokensClient _tokensClient; + private readonly IPersonalClient _personalClient; + private readonly NavigationManager _navigation; + + public AuthProvider ProviderType => AuthProvider.Jwt; + + public JwtAuthenticationService(ILocalStorageService localStorage, IPersonalClient personalClient, ITokensClient tokensClient, NavigationManager navigation) + { + _localStorage = localStorage; + _personalClient = personalClient; + _tokensClient = tokensClient; + _navigation = navigation; + } + + public override async Task GetAuthenticationStateAsync() + { + string cachedToken = await GetCachedAuthTokenAsync(); + if (string.IsNullOrWhiteSpace(cachedToken)) + { + return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity())); + } + + // Generate claimsIdentity from cached token + var claimsIdentity = new ClaimsIdentity(GetClaimsFromJwt(cachedToken), "jwt"); + + // Add cached permissions as claims + if (await GetCachedPermissionsAsync() is List cachedPermissions) + { + claimsIdentity.AddClaims(cachedPermissions.Select(p => new Claim(FSHClaims.Permission, p))); + } + + return new AuthenticationState(new ClaimsPrincipal(claimsIdentity)); + } + + public void NavigateToExternalLogin(string returnUrl) => + throw new NotImplementedException(); + + public async Task LoginAsync(string tenantId, TokenRequest request) + { + var tokenResponse = await _tokensClient.GetTokenAsync(tenantId, request); + + string? token = tokenResponse.Token; + string? refreshToken = tokenResponse.RefreshToken; + + if (string.IsNullOrWhiteSpace(token) || string.IsNullOrWhiteSpace(refreshToken)) + { + return false; + } + + await CacheAuthTokens(token, refreshToken); + + // Get permissions for the current user and add them to the cache + var permissions = await _personalClient.GetPermissionsAsync(); + await CachePermissions(permissions); + + NotifyAuthenticationStateChanged(GetAuthenticationStateAsync()); + + return true; + } + + public async Task LogoutAsync() + { + await ClearCacheAsync(); + + NotifyAuthenticationStateChanged(GetAuthenticationStateAsync()); + + _navigation.NavigateTo("/login"); + } + + public async Task ReLoginAsync(string returnUrl) + { + await LogoutAsync(); + _navigation.NavigateTo(returnUrl); + } + + public async ValueTask RequestAccessToken() + { + var authState = await GetAuthenticationStateAsync(); + if (authState.User.Identity?.IsAuthenticated is not true) + { + return new AccessTokenResult(AccessTokenResultStatus.RequiresRedirect, null, "/login"); + } + + // We make sure the access token is only refreshed by one thread at a time. The other ones have to wait. + await _semaphore.WaitAsync(); + try + { + string? token = await GetCachedAuthTokenAsync(); + + // Check if token needs to be refreshed (when its expiration time is less than 1 minute away) + var expTime = authState.User.GetExpiration(); + var diff = expTime - DateTime.UtcNow; + if (diff.TotalMinutes <= 1) + { + string? refreshToken = await GetCachedRefreshTokenAsync(); + (bool succeeded, var response) = await TryRefreshTokenAsync(new RefreshTokenRequest { Token = token, RefreshToken = refreshToken }); + if (!succeeded) + { + return new AccessTokenResult(AccessTokenResultStatus.RequiresRedirect, null, "/login"); + } + + token = response?.Token; + } + + return new AccessTokenResult(AccessTokenResultStatus.Success, new AccessToken() { Value = token }, string.Empty); + } + finally + { + _semaphore.Release(); + } + } + + public ValueTask RequestAccessToken(AccessTokenRequestOptions options) => + RequestAccessToken(); + + private async Task<(bool Succeeded, TokenResponse? Token)> TryRefreshTokenAsync(RefreshTokenRequest request) + { + var authState = await GetAuthenticationStateAsync(); + string? tenantKey = authState.User.GetTenant(); + if (string.IsNullOrWhiteSpace(tenantKey)) + { + throw new InvalidOperationException("Can't refresh token when user is not logged in!"); + } + + try + { + var tokenResponse = await _tokensClient.RefreshAsync(tenantKey, request); + + await CacheAuthTokens(tokenResponse.Token, tokenResponse.RefreshToken); + + return (true, tokenResponse); + } + catch (ApiException) + { + return (false, null); + } + } + + private async ValueTask CacheAuthTokens(string? token, string? refreshToken) + { + await _localStorage.SetItemAsync(StorageConstants.Local.AuthToken, token); + await _localStorage.SetItemAsync(StorageConstants.Local.RefreshToken, refreshToken); + } + + private ValueTask CachePermissions(ICollection permissions) => + _localStorage.SetItemAsync(StorageConstants.Local.Permissions, permissions); + + private async Task ClearCacheAsync() + { + await _localStorage.RemoveItemAsync(StorageConstants.Local.AuthToken); + await _localStorage.RemoveItemAsync(StorageConstants.Local.RefreshToken); + await _localStorage.RemoveItemAsync(StorageConstants.Local.Permissions); + } + + private ValueTask GetCachedAuthTokenAsync() => + _localStorage.GetItemAsync(StorageConstants.Local.AuthToken); + + private ValueTask GetCachedRefreshTokenAsync() => + _localStorage.GetItemAsync(StorageConstants.Local.RefreshToken); + + private ValueTask> GetCachedPermissionsAsync() => + _localStorage.GetItemAsync>(StorageConstants.Local.Permissions); + + private IEnumerable GetClaimsFromJwt(string jwt) + { + var claims = new List(); + string payload = jwt.Split('.')[1]; + byte[] jsonBytes = ParseBase64WithoutPadding(payload); + var keyValuePairs = JsonSerializer.Deserialize>(jsonBytes); + + if (keyValuePairs is not null) + { + keyValuePairs.TryGetValue(ClaimTypes.Role, out object? roles); + + if (roles is not null) + { + string? rolesString = roles.ToString(); + if (!string.IsNullOrEmpty(rolesString)) + { + if (rolesString.Trim().StartsWith("[")) + { + string[]? parsedRoles = JsonSerializer.Deserialize(rolesString); + + if (parsedRoles is not null) + { + claims.AddRange(parsedRoles.Select(role => new Claim(ClaimTypes.Role, role))); + } + } + else + { + claims.Add(new Claim(ClaimTypes.Role, rolesString)); + } + } + + keyValuePairs.Remove(ClaimTypes.Role); + } + + claims.AddRange(keyValuePairs.Select(kvp => new Claim(kvp.Key, kvp.Value.ToString() ?? string.Empty))); + } + + return claims; + } + + private byte[] ParseBase64WithoutPadding(string payload) + { + payload = payload.Trim().Replace('-', '+').Replace('_', '/'); + string base64 = payload.PadRight(payload.Length + ((4 - (payload.Length % 4)) % 4), '='); + return Convert.FromBase64String(base64); + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/MustHavePermissionAttribute.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/MustHavePermissionAttribute.cs new file mode 100644 index 0000000..c18b66b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/MustHavePermissionAttribute.cs @@ -0,0 +1,10 @@ +using FSH.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Authorization; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Auth; + +public class MustHavePermissionAttribute : AuthorizeAttribute +{ + public MustHavePermissionAttribute(string action, string resource) => + Policy = FSHPermission.NameFor(action, resource); +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/Startup.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/Startup.cs new file mode 100644 index 0000000..74c0c70 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Auth/Startup.cs @@ -0,0 +1,47 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.Auth.AzureAd; +using FSH.BlazorWebAssembly.Client.Infrastructure.Auth.Jwt; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication.Internal; +using Microsoft.Extensions.DependencyInjection; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Auth; + +internal static class Startup +{ + public static IServiceCollection AddAuthentication(this IServiceCollection services, IConfiguration config) => + config[nameof(AuthProvider)] switch + { + // AzureAd + nameof(AuthProvider.AzureAd) => services + .AddScoped() + .AddScoped() + .AddMsalAuthentication(options => + { + config.Bind(nameof(AuthProvider.AzureAd), options.ProviderOptions.Authentication); + options.ProviderOptions.DefaultAccessTokenScopes.Add( + config[$"{nameof(AuthProvider.AzureAd)}:{ConfigNames.ApiScope}"]); + options.ProviderOptions.LoginMode = "redirect"; + }) + .AddAccountClaimsPrincipalFactory() + .Services, + + // Jwt + _ => services + .AddScoped() + .AddScoped(sp => (IAuthenticationService)sp.GetRequiredService()) + .AddScoped(sp => (IAccessTokenProvider)sp.GetRequiredService()) + .AddScoped() + .AddScoped() + }; + + public static IHttpClientBuilder AddAuthenticationHandler(this IHttpClientBuilder builder, IConfiguration config) => + config[nameof(AuthProvider)] switch + { + // AzureAd + nameof(AuthProvider.AzureAd) => + builder.AddHttpMessageHandler(), + + // Jwt + _ => builder.AddHttpMessageHandler() + }; +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Client.Infrastructure.csproj b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Client.Infrastructure.csproj new file mode 100644 index 0000000..e1301f9 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Client.Infrastructure.csproj @@ -0,0 +1,39 @@ + + + + net6.0 + FSH.BlazorWebAssembly.Client.Infrastructure + FSH.BlazorWebAssembly.Client.Infrastructure + + + + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Common/AccessTokenProviderExtensions.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Common/AccessTokenProviderExtensions.cs new file mode 100644 index 0000000..417c925 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Common/AccessTokenProviderExtensions.cs @@ -0,0 +1,12 @@ +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Common; + +public static class AccessTokenProviderExtensions +{ + public static async Task GetAccessTokenAsync(this IAccessTokenProvider tokenProvider) => + (await tokenProvider.RequestAccessToken()) + .TryGetToken(out var token) + ? token.Value + : null; +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Common/ApplicationConstants.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Common/ApplicationConstants.cs new file mode 100644 index 0000000..05fe79a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Common/ApplicationConstants.cs @@ -0,0 +1,15 @@ +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Common; + +public static class ApplicationConstants +{ + public static readonly List SupportedImageFormats = new() + { + ".jpeg", + ".jpg", + ".png" + }; + public static readonly string StandardImageFormat = "image/jpeg"; + public static readonly int MaxImageWidth = 1500; + public static readonly int MaxImageHeight = 1500; + public static readonly long MaxAllowedSize = 1000000; // Allows Max File Size of 1 Mb. +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Common/ConfigNames.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Common/ConfigNames.cs new file mode 100644 index 0000000..cf6d2b8 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Common/ConfigNames.cs @@ -0,0 +1,7 @@ +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Common; + +public static class ConfigNames +{ + public const string ApiBaseUrl = "ApiBaseUrl"; + public const string ApiScope = "ApiScope"; +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Common/IAppService.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Common/IAppService.cs new file mode 100644 index 0000000..520bf7e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Common/IAppService.cs @@ -0,0 +1,5 @@ +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Common; + +public interface IAppService +{ +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Common/LocalizationConstants.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Common/LocalizationConstants.cs new file mode 100644 index 0000000..093af42 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Common/LocalizationConstants.cs @@ -0,0 +1,21 @@ +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Common; + +public record LanguageCode(string Code, string DisplayName, bool IsRTL = false); + +public static class LocalizationConstants +{ + public static readonly LanguageCode[] SupportedLanguages = + { + new("en-US", "English"), + new("fr-FR", "French"), + new("km_KH", "Khmer"), + new("de-DE", "German"), + new("nl-NL", "Dutch - Netherlands"), + new("es-ES", "Spanish"), + new("ru-RU", "Russian"), + new("sv-SE", "Swedish"), + new("id-ID", "Indonesia"), + new("it-IT", "Italian"), + new("ar", "عربي", true) + }; +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Common/StorageConstants.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Common/StorageConstants.cs new file mode 100644 index 0000000..b0cf4fc --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Common/StorageConstants.cs @@ -0,0 +1,14 @@ +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Common; + +public static class StorageConstants +{ + public static class Local + { + public static string Preference = "clientPreference"; + + public static string AuthToken = "authToken"; + public static string RefreshToken = "refreshToken"; + public static string ImageUri = "userImageURL"; + public static string Permissions = "permissions"; + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/GlobalUsings.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/GlobalUsings.cs new file mode 100644 index 0000000..d093b73 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/GlobalUsings.cs @@ -0,0 +1,7 @@ +global using System.Net.Http.Headers; +global using System.Security.Claims; +global using System.Text.Json; +global using Blazored.LocalStorage; +global using FSH.BlazorWebAssembly.Client.Infrastructure.Common; +global using Microsoft.AspNetCore.Components.Authorization; +global using Microsoft.Extensions.Configuration; diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Notifications/ConnectionState.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Notifications/ConnectionState.cs new file mode 100644 index 0000000..e1b3a4b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Notifications/ConnectionState.cs @@ -0,0 +1,8 @@ +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Notifications; + +public enum ConnectionState +{ + Connected, + Connecting, + Disconnected +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Notifications/ConnectionStateChanged.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Notifications/ConnectionStateChanged.cs new file mode 100644 index 0000000..5246e54 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Notifications/ConnectionStateChanged.cs @@ -0,0 +1,5 @@ +using FSH.WebApi.Shared.Notifications; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Notifications; + +public record ConnectionStateChanged(ConnectionState State, string? Message) : INotificationMessage; \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Notifications/INotificationPublisher.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Notifications/INotificationPublisher.cs new file mode 100644 index 0000000..54e8aba --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Notifications/INotificationPublisher.cs @@ -0,0 +1,8 @@ +using FSH.WebApi.Shared.Notifications; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Notifications; + +public interface INotificationPublisher +{ + Task PublishAsync(INotificationMessage notification); +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Notifications/NotificationPublisher.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Notifications/NotificationPublisher.cs new file mode 100644 index 0000000..9ab414b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Notifications/NotificationPublisher.cs @@ -0,0 +1,24 @@ +using FSH.WebApi.Shared.Notifications; +using MediatR; +using Microsoft.Extensions.Logging; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Notifications; + +public class NotificationPublisher : INotificationPublisher +{ + private readonly ILogger _logger; + private readonly IPublisher _mediator; + + public NotificationPublisher(ILogger logger, IPublisher mediator) => + (_logger, _mediator) = (logger, mediator); + + public Task PublishAsync(INotificationMessage notification) + { + _logger.LogInformation("Publishing Notification : {notification}", notification.GetType().Name); + return _mediator.Publish(CreateNotificationWrapper(notification)); + } + + private INotification CreateNotificationWrapper(INotificationMessage notification) => + (INotification)Activator.CreateInstance( + typeof(NotificationWrapper<>).MakeGenericType(notification.GetType()), notification)!; +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Notifications/NotificationWrapper.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Notifications/NotificationWrapper.cs new file mode 100644 index 0000000..ccb1a84 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Notifications/NotificationWrapper.cs @@ -0,0 +1,12 @@ +using FSH.WebApi.Shared.Notifications; +using MediatR; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Notifications; + +public class NotificationWrapper : INotification + where TNotificationMessage : INotificationMessage +{ + public NotificationWrapper(TNotificationMessage notification) => Notification = notification; + + public TNotificationMessage Notification { get; } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Notifications/Startup.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Notifications/Startup.cs new file mode 100644 index 0000000..1784064 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Notifications/Startup.cs @@ -0,0 +1,34 @@ +using FSH.WebApi.Shared.Notifications; +using MediatR; +using MediatR.Courier; +using MediatR.Courier.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Notifications; + +internal static class Startup +{ + public static IServiceCollection AddNotifications(this IServiceCollection services) + { + // Add mediator processing of notifications + var assemblies = AppDomain.CurrentDomain.GetAssemblies(); + + services + .AddMediatR(assemblies) + .AddCourier(assemblies) + .AddTransient(); + + // Register handlers for all INotificationMessages + foreach (var eventType in assemblies + .SelectMany(a => a.GetTypes()) + .Where(t => t.GetInterfaces().Any(i => i == typeof(INotificationMessage)))) + { + services.AddSingleton( + typeof(INotificationHandler<>).MakeGenericType( + typeof(NotificationWrapper<>).MakeGenericType(eventType)), + serviceProvider => serviceProvider.GetRequiredService(typeof(MediatRCourier))); + } + + return services; + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Preferences/ClientPreference.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Preferences/ClientPreference.cs new file mode 100644 index 0000000..2bbabe3 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Preferences/ClientPreference.cs @@ -0,0 +1,15 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.Theme; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Preferences; + +public class ClientPreference : IPreference +{ + public bool IsDarkMode { get; set; } + public bool IsRTL { get; set; } + public bool IsDrawerOpen { get; set; } + public string PrimaryColor { get; set; } = CustomColors.Light.Primary; + public string SecondaryColor { get; set; } = CustomColors.Light.Secondary; + public double BorderRadius { get; set; } = 5; + public string LanguageCode { get; set; } = LocalizationConstants.SupportedLanguages.FirstOrDefault()?.Code ?? "en-US"; + public FshTablePreference TablePreference { get; set; } = new FshTablePreference(); +} diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Preferences/ClientPreferenceManager.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Preferences/ClientPreferenceManager.cs new file mode 100644 index 0000000..b4a4dbe --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Preferences/ClientPreferenceManager.cs @@ -0,0 +1,137 @@ +using System.Text.RegularExpressions; +using FSH.BlazorWebAssembly.Client.Infrastructure.Theme; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Preferences; + +public class ClientPreferenceManager : IClientPreferenceManager +{ + private readonly ILocalStorageService _localStorageService; + + public ClientPreferenceManager( + ILocalStorageService localStorageService) + { + _localStorageService = localStorageService; + } + + public async Task ToggleDarkModeAsync() + { + if (await GetPreference() is ClientPreference preference) + { + preference.IsDarkMode = !preference.IsDarkMode; + await SetPreference(preference); + return !preference.IsDarkMode; + } + + return false; + } + + public async Task ToggleDrawerAsync() + { + if (await GetPreference() is ClientPreference preference) + { + preference.IsDrawerOpen = !preference.IsDrawerOpen; + await SetPreference(preference); + return preference.IsDrawerOpen; + } + + return false; + } + + public async Task ToggleLayoutDirectionAsync() + { + if (await GetPreference() is ClientPreference preference) + { + preference.IsRTL = !preference.IsRTL; + await SetPreference(preference); + return preference.IsRTL; + } + + return false; + } + + public async Task ChangeLanguageAsync(string languageCode) + { + if (await GetPreference() is ClientPreference preference) + { + var language = Array.Find(LocalizationConstants.SupportedLanguages, a => a.Code == languageCode); + if (language?.Code is not null) + { + preference.LanguageCode = language.Code; + preference.IsRTL = language.IsRTL; + } + else + { + preference.LanguageCode = "en-EN"; + preference.IsRTL = false; + } + + await SetPreference(preference); + return true; + } + + return false; + } + + public async Task GetCurrentThemeAsync() + { + if (await GetPreference() is ClientPreference preference) + { + if (preference.IsDarkMode) return new DarkTheme(); + } + + return new LightTheme(); + } + + public async Task GetPrimaryColorAsync() + { + if (await GetPreference() is ClientPreference preference) + { + string colorCode = preference.PrimaryColor; + if (Regex.Match(colorCode, "^#(?:[0-9a-fA-F]{3,4}){1,2}$").Success) + { + return colorCode; + } + else + { + preference.PrimaryColor = CustomColors.Light.Primary; + await SetPreference(preference); + return preference.PrimaryColor; + } + } + + return CustomColors.Light.Primary; + } + + public async Task IsRTL() + { + if (await GetPreference() is ClientPreference preference) + { + return preference.IsRTL; + } + + return false; + } + + public async Task IsDrawerOpen() + { + if (await GetPreference() is ClientPreference preference) + { + return preference.IsDrawerOpen; + } + + return false; + } + + public static string Preference = "clientPreference"; + + public async Task GetPreference() + { + return await _localStorageService.GetItemAsync(Preference) ?? new ClientPreference(); + } + + public async Task SetPreference(IPreference preference) + { + await _localStorageService.SetItemAsync(Preference, preference as ClientPreference); + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Preferences/FshTablePreference.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Preferences/FshTablePreference.cs new file mode 100644 index 0000000..8ba0c18 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Preferences/FshTablePreference.cs @@ -0,0 +1,11 @@ +using FSH.WebApi.Shared.Notifications; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Preferences; + +public class FshTablePreference : INotificationMessage +{ + public bool IsDense { get; set; } + public bool IsStriped { get; set; } + public bool HasBorder { get; set; } + public bool IsHoverable { get; set; } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Preferences/IClientPreferenceManager.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Preferences/IClientPreferenceManager.cs new file mode 100644 index 0000000..a871866 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Preferences/IClientPreferenceManager.cs @@ -0,0 +1,14 @@ +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Preferences; + +public interface IClientPreferenceManager : IPreferenceManager +{ + Task GetCurrentThemeAsync(); + + Task ToggleDarkModeAsync(); + + Task ToggleDrawerAsync(); + + Task ToggleLayoutDirectionAsync(); +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Preferences/IPreference.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Preferences/IPreference.cs new file mode 100644 index 0000000..42135ac --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Preferences/IPreference.cs @@ -0,0 +1,6 @@ +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Preferences; + +public interface IPreference +{ + // public string LanguageCode { get; set; } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Preferences/IPreferenceManager.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Preferences/IPreferenceManager.cs new file mode 100644 index 0000000..83d79b6 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Preferences/IPreferenceManager.cs @@ -0,0 +1,10 @@ +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Preferences; + +public interface IPreferenceManager : IAppService +{ + Task SetPreference(IPreference preference); + + Task GetPreference(); + + Task ChangeLanguageAsync(string languageCode); +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Startup.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Startup.cs new file mode 100644 index 0000000..c94cae1 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Startup.cs @@ -0,0 +1,81 @@ +using System.Globalization; +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using FSH.BlazorWebAssembly.Client.Infrastructure.Auth; +using FSH.BlazorWebAssembly.Client.Infrastructure.Notifications; +using FSH.BlazorWebAssembly.Client.Infrastructure.Preferences; +using FSH.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.DependencyInjection; +using MudBlazor; +using MudBlazor.Services; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure; + +public static class Startup +{ + private const string ClientName = "FullStackHero.API"; + + public static IServiceCollection AddClientServices(this IServiceCollection services, IConfiguration config) => + services + .AddLocalization(options => options.ResourcesPath = "Resources") + .AddBlazoredLocalStorage() + .AddMudServices(configuration => + { + configuration.SnackbarConfiguration.PositionClass = Defaults.Classes.Position.BottomRight; + configuration.SnackbarConfiguration.HideTransitionDuration = 100; + configuration.SnackbarConfiguration.ShowTransitionDuration = 100; + configuration.SnackbarConfiguration.VisibleStateDuration = 3000; + configuration.SnackbarConfiguration.ShowCloseIcon = false; + }) + .AddScoped() + .AutoRegisterInterfaces() + .AutoRegisterInterfaces() + .AddNotifications() + .AddAuthentication(config) + .AddAuthorizationCore(RegisterPermissionClaims) + + // Add Api Http Client. + .AddHttpClient(ClientName, client => + { + client.DefaultRequestHeaders.AcceptLanguage.Clear(); + client.DefaultRequestHeaders.AcceptLanguage.ParseAdd(CultureInfo.DefaultThreadCurrentCulture?.TwoLetterISOLanguageName); + client.BaseAddress = new Uri(config[ConfigNames.ApiBaseUrl]); + }) + .AddAuthenticationHandler(config) + .Services + .AddScoped(sp => sp.GetRequiredService().CreateClient(ClientName)); + + private static void RegisterPermissionClaims(AuthorizationOptions options) + { + foreach (var permission in FSHPermissions.All) + { + options.AddPolicy(permission.Name, policy => policy.RequireClaim(FSHClaims.Permission, permission.Name)); + } + } + + public static IServiceCollection AutoRegisterInterfaces(this IServiceCollection services) + { + var @interface = typeof(T); + + var types = @interface + .Assembly + .GetExportedTypes() + .Where(t => t.IsClass && !t.IsAbstract) + .Select(t => new + { + Service = t.GetInterface($"I{t.Name}"), + Implementation = t + }) + .Where(t => t.Service != null); + + foreach (var type in types) + { + if (@interface.IsAssignableFrom(type.Service)) + { + services.AddTransient(type.Service, type.Implementation); + } + } + + return services; + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Theme/CustomColors.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Theme/CustomColors.cs new file mode 100644 index 0000000..6448269 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Theme/CustomColors.cs @@ -0,0 +1,42 @@ +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Theme; + +public static class CustomColors +{ + public static readonly List ThemeColors = new() + { + Light.Primary, + Colors.Blue.Default, + Colors.BlueGrey.Default, + Colors.Purple.Default, + Colors.Orange.Default, + Colors.Red.Default, + Colors.Amber.Default, + Colors.DeepPurple.Default, + Colors.Pink.Default, + Colors.Indigo.Default, + Colors.LightBlue.Default, + Colors.Cyan.Default, + }; + + public static class Light + { + public const string Primary = "#3eaf7c"; + public const string Secondary = "#2196f3"; + public const string Background = "#FFF"; + public const string AppbarBackground = "#FFF"; + public const string AppbarText = "#6e6e6e"; + } + + public static class Dark + { + public const string Primary = "#3eaf7c"; + public const string Secondary = "#2196f3"; + public const string Background = "#1b1f22"; + public const string AppbarBackground = "#1b1f22"; + public const string DrawerBackground = "#121212"; + public const string Surface = "#202528"; + public const string Disabled = "#545454"; + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Theme/CustomTypography.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Theme/CustomTypography.cs new file mode 100644 index 0000000..0b33533 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Theme/CustomTypography.cs @@ -0,0 +1,114 @@ +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Theme; + +public static class CustomTypography +{ + public static Typography FSHTypography => new Typography() + { + Default = new Default() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = ".875rem", + FontWeight = 200, + LineHeight = 1.43, + LetterSpacing = ".01071em" + }, + H1 = new H1() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = "6rem", + FontWeight = 300, + LineHeight = 1.167, + LetterSpacing = "-.01562em" + }, + H2 = new H2() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = "3.75rem", + FontWeight = 300, + LineHeight = 1.2, + LetterSpacing = "-.00833em" + }, + H3 = new H3() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = "3rem", + FontWeight = 400, + LineHeight = 1.167, + LetterSpacing = "0" + }, + H4 = new H4() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = "2.125rem", + FontWeight = 400, + LineHeight = 1.235, + LetterSpacing = ".00735em" + }, + H5 = new H5() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = "1.5rem", + FontWeight = 400, + LineHeight = 1.334, + LetterSpacing = "0" + }, + H6 = new H6() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = "1.25rem", + FontWeight = 400, + LineHeight = 1.6, + LetterSpacing = ".0075em" + }, + Button = new Button() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = ".875rem", + FontWeight = 400, + LineHeight = 1.75, + LetterSpacing = ".02857em" + }, + Body1 = new Body1() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = "1rem", + FontWeight = 400, + LineHeight = 1.5, + LetterSpacing = ".00938em" + }, + Body2 = new Body2() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = ".875rem", + FontWeight = 400, + LineHeight = 1.43, + LetterSpacing = ".01071em" + }, + Caption = new Caption() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = ".75rem", + FontWeight = 200, + LineHeight = 1.66, + LetterSpacing = ".03333em" + }, + Subtitle1 = new Subtitle1() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = "1rem", + FontWeight = 400, + LineHeight = 1.57, + LetterSpacing = ".00714em" + }, + Subtitle2 = new Subtitle2() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = ".875rem", + FontWeight = 400, + LineHeight = 1.57, + LetterSpacing = ".00714em" + } + }; +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Theme/DarkTheme.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Theme/DarkTheme.cs new file mode 100644 index 0000000..ff1b6aa --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Theme/DarkTheme.cs @@ -0,0 +1,44 @@ +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Theme; + +public class DarkTheme : MudTheme +{ + public DarkTheme() + { + Palette = new Palette() + { + Primary = CustomColors.Dark.Primary, + Secondary = CustomColors.Dark.Secondary, + Success = CustomColors.Dark.Primary, + Black = "#27272f", + Background = CustomColors.Dark.Background, + BackgroundGrey = "#27272f", + Surface = CustomColors.Dark.Surface, + DrawerBackground = CustomColors.Dark.DrawerBackground, + DrawerText = "rgba(255,255,255, 0.50)", + AppbarBackground = CustomColors.Dark.AppbarBackground, + AppbarText = "rgba(255,255,255, 0.70)", + TextPrimary = "rgba(255,255,255, 0.70)", + TextSecondary = "rgba(255,255,255, 0.50)", + ActionDefault = "#adadb1", + ActionDisabled = "rgba(255,255,255, 0.26)", + ActionDisabledBackground = "rgba(255,255,255, 0.12)", + DrawerIcon = "rgba(255,255,255, 0.50)", + TableLines = "#e0e0e036", + Dark = CustomColors.Dark.DrawerBackground, + Divider = "#e0e0e036", + OverlayDark = "hsl(0deg 0% 0% / 75%)", + TextDisabled = CustomColors.Dark.Disabled + }; + + LayoutProperties = new LayoutProperties() + { + DefaultBorderRadius = "5px", + }; + + Typography = CustomTypography.FSHTypography; + Shadows = new Shadow(); + ZIndex = new ZIndex() { Drawer = 1300 }; + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Theme/LightTheme.cs b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Theme/LightTheme.cs new file mode 100644 index 0000000..8093aa4 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client.Infrastructure/Theme/LightTheme.cs @@ -0,0 +1,31 @@ +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Infrastructure.Theme; + +public class LightTheme : MudTheme +{ + public LightTheme() + { + Palette = new Palette() + { + Primary = CustomColors.Light.Primary, + Secondary = CustomColors.Light.Secondary, + Background = CustomColors.Light.Background, + AppbarBackground = CustomColors.Light.AppbarBackground, + AppbarText = CustomColors.Light.AppbarText, + DrawerBackground = CustomColors.Light.Background, + DrawerText = "rgba(0,0,0, 0.7)", + Success = CustomColors.Light.Primary, + TableLines = "#e0e0e029", + OverlayDark = "hsl(0deg 0% 0% / 75%)" + }; + LayoutProperties = new LayoutProperties() + { + DefaultBorderRadius = "5px" + }; + + Typography = CustomTypography.FSHTypography; + Shadows = new Shadow(); + ZIndex = new ZIndex() { Drawer = 1300 }; + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/App.razor b/blazor-wasm-boilerplate-main/src/Client/App.razor new file mode 100644 index 0000000..8fd8903 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/App.razor @@ -0,0 +1,23 @@ + + + + + + @if (@context.User.Identity?.IsAuthenticated is true) + { +

You are not authorized to be here.

+ } + else + { + + } +
+
+
+ + +

Sorry, there's nothing at this address.

+
+
+
+
\ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Client.csproj b/blazor-wasm-boilerplate-main/src/Client/Client.csproj new file mode 100644 index 0000000..08fec69 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Client.csproj @@ -0,0 +1,35 @@ + + + + net6.0 + FSH.BlazorWebAssembly.Client + FSH.BlazorWebAssembly.Client + service-worker-assets.js + true + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/Common/CustomValidation.cs b/blazor-wasm-boilerplate-main/src/Client/Components/Common/CustomValidation.cs new file mode 100644 index 0000000..5a16322 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/Common/CustomValidation.cs @@ -0,0 +1,51 @@ +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Forms; + +namespace FSH.BlazorWebAssembly.Client.Components.Common; + +// See https://docs.microsoft.com/en-us/aspnet/core/blazor/forms-validation?view=aspnetcore-6.0#server-validation-with-a-validator-component +public class CustomValidation : ComponentBase +{ + private ValidationMessageStore? _messageStore; + + [CascadingParameter] + private EditContext? CurrentEditContext { get; set; } + + protected override void OnInitialized() + { + if (CurrentEditContext is null) + { + throw new InvalidOperationException( + $"{nameof(CustomValidation)} requires a cascading " + + $"parameter of type {nameof(EditContext)}. " + + $"For example, you can use {nameof(CustomValidation)} " + + $"inside an {nameof(EditForm)}."); + } + + _messageStore = new(CurrentEditContext); + + CurrentEditContext.OnValidationRequested += (s, e) => + _messageStore?.Clear(); + CurrentEditContext.OnFieldChanged += (s, e) => + _messageStore?.Clear(e.FieldIdentifier); + } + + public void DisplayErrors(IDictionary> errors) + { + if (CurrentEditContext is not null && errors is not null) + { + foreach (var err in errors) + { + _messageStore?.Add(CurrentEditContext.Field(err.Key), err.Value); + } + + CurrentEditContext.NotifyValidationStateChanged(); + } + } + + public void ClearErrors() + { + _messageStore?.Clear(); + CurrentEditContext?.NotifyValidationStateChanged(); + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/Common/ErrorHandler.razor b/blazor-wasm-boilerplate-main/src/Client/Components/Common/ErrorHandler.razor new file mode 100644 index 0000000..9467791 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/Common/ErrorHandler.razor @@ -0,0 +1,2 @@ +@inherits ErrorBoundary +@ChildContent \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/Common/ErrorHandler.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Components/Common/ErrorHandler.razor.cs new file mode 100644 index 0000000..a0ed8d6 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/Common/ErrorHandler.razor.cs @@ -0,0 +1,31 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.Auth; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Components.Common; + +public partial class ErrorHandler +{ + [Inject] + public IAuthenticationService AuthService { get; set; } = default!; + + public List _receivedExceptions = new(); + + protected override async Task OnErrorAsync(Exception exception) + { + _receivedExceptions.Add(exception); + switch (exception) + { + case UnauthorizedAccessException: + await AuthService.LogoutAsync(); + Snackbar.Add("Authentication Failed", Severity.Error); + break; + } + } + + public new void Recover() + { + _receivedExceptions.Clear(); + base.Recover(); + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/Common/FshCustomError.razor b/blazor-wasm-boilerplate-main/src/Client/Components/Common/FshCustomError.razor new file mode 100644 index 0000000..827318b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/Common/FshCustomError.razor @@ -0,0 +1 @@ +Oopsie !! 😔 \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/Common/FshTable.cs b/blazor-wasm-boilerplate-main/src/Client/Components/Common/FshTable.cs new file mode 100644 index 0000000..f661f11 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/Common/FshTable.cs @@ -0,0 +1,39 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.Notifications; +using FSH.BlazorWebAssembly.Client.Infrastructure.Preferences; +using MediatR.Courier; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Components.Common; + +public class FshTable : MudTable +{ + [Inject] + private IClientPreferenceManager ClientPreferences { get; set; } = default!; + [Inject] + protected ICourier Courier { get; set; } = default!; + + protected override async Task OnInitializedAsync() + { + if (await ClientPreferences.GetPreference() is ClientPreference clientPreference) + { + SetTablePreference(clientPreference.TablePreference); + } + + Courier.SubscribeWeak>(wrapper => + { + SetTablePreference(wrapper.Notification); + StateHasChanged(); + }); + + await base.OnInitializedAsync(); + } + + private void SetTablePreference(FshTablePreference tablePreference) + { + Dense = tablePreference.IsDense; + Striped = tablePreference.IsStriped; + Bordered = tablePreference.HasBorder; + Hover = tablePreference.IsHoverable; + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/Common/FshTitle.razor b/blazor-wasm-boilerplate-main/src/Client/Components/Common/FshTitle.razor new file mode 100644 index 0000000..e696be9 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/Common/FshTitle.razor @@ -0,0 +1,8 @@ +@Title +@Description + +@code +{ + [Parameter] public string? Title { get; set; } + [Parameter] public string? Description { get; set; } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/Common/PersonCard.razor b/blazor-wasm-boilerplate-main/src/Client/Components/Common/PersonCard.razor new file mode 100644 index 0000000..d17630e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/Common/PersonCard.razor @@ -0,0 +1,19 @@ + + + + @if (string.IsNullOrEmpty(this.ImageUri)) + { + @FullName?.ToUpper().FirstOrDefault() + + } + else + { + + } + + + @FullName + @Email + + + diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/Common/PersonCard.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Components/Common/PersonCard.razor.cs new file mode 100644 index 0000000..7498f08 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/Common/PersonCard.razor.cs @@ -0,0 +1,46 @@ +using System.Security.Claims; +using FSH.BlazorWebAssembly.Client.Infrastructure.Common; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; + +namespace FSH.BlazorWebAssembly.Client.Components.Common; + +public partial class PersonCard +{ + [Parameter] + public string? Class { get; set; } + [Parameter] + public string? Style { get; set; } + + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + + private string? UserId { get; set; } + private string? Email { get; set; } + private string? FullName { get; set; } + private string? ImageUri { get; set; } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + await LoadUserData(); + } + } + + private async Task LoadUserData() + { + var user = (await AuthState).User; + if (user.Identity?.IsAuthenticated == true) + { + if (string.IsNullOrEmpty(UserId)) + { + FullName = user.GetFullName(); + UserId = user.GetUserId(); + Email = user.GetEmail(); + ImageUri = string.IsNullOrEmpty(user?.GetImageUrl()) ? string.Empty : (Config[ConfigNames.ApiBaseUrl] + user?.GetImageUrl()); + StateHasChanged(); + } + } + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/Common/TablePager.razor b/blazor-wasm-boilerplate-main/src/Client/Components/Common/TablePager.razor new file mode 100644 index 0000000..c5fdc78 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/Common/TablePager.razor @@ -0,0 +1,3 @@ +@inject IStringLocalizer L + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/Dialogs/DeleteConfirmation.razor b/blazor-wasm-boilerplate-main/src/Client/Components/Dialogs/DeleteConfirmation.razor new file mode 100644 index 0000000..f08d440 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/Dialogs/DeleteConfirmation.razor @@ -0,0 +1,31 @@ +@inject IStringLocalizer L + + + + + + @L["Delete Confirmation"] + + + + @ContentText + + + @L["Cancel"] + @L["Confirm"] + + + +@code { + [CascadingParameter] + MudDialogInstance MudDialog { get; set; } = default!; + + [Parameter] + public string? ContentText { get; set; } + + void Submit() + { + MudDialog.Close(DialogResult.Ok(true)); + } + void Cancel() => MudDialog.Cancel(); +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/Dialogs/Logout.razor b/blazor-wasm-boilerplate-main/src/Client/Components/Dialogs/Logout.razor new file mode 100644 index 0000000..a660e8e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/Dialogs/Logout.razor @@ -0,0 +1,40 @@ +@namespace FSH.BlazorWebAssembly.Client.Shared.Dialogs + +@inject IStringLocalizer L +@inject IAuthenticationService AuthService + + + + + + @L["Logout Confirmation"] + + + + @ContentText + + + @L["Cancel"] + @ButtonText + + + +@code { + [Parameter] public string? ContentText { get; set; } + + [Parameter] public string? ButtonText { get; set; } + + [Parameter] public Color Color { get; set; } + + [CascadingParameter] MudDialogInstance MudDialog { get; set; } = default!; + + async Task Submit() + { + await AuthService.LogoutAsync(); + Snackbar.Add(@L["Logged out"], Severity.Info); + MudDialog.Close(DialogResult.Ok(true)); + } + + void Cancel() => + MudDialog.Cancel(); +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/AddEditModal.razor b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/AddEditModal.razor new file mode 100644 index 0000000..ea086f5 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/AddEditModal.razor @@ -0,0 +1,51 @@ +@typeparam TRequest + +@inject IStringLocalizer L + + + + + + + @if (IsCreate) + { + + } + else + { + + } + @Title + + + + + + + + + @ChildContent(RequestModel) + + + + + + + @L["Cancel"] + + @if (IsCreate) + { + + @L["Save"] + + } + else + { + + @L["Update"] + + } + + + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/AddEditModal.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/AddEditModal.razor.cs new file mode 100644 index 0000000..197c487 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/AddEditModal.razor.cs @@ -0,0 +1,49 @@ +using FSH.BlazorWebAssembly.Client.Components.Common; +using FSH.BlazorWebAssembly.Client.Shared; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Components.EntityTable; + +public partial class AddEditModal : IAddEditModal +{ + [Parameter] + [EditorRequired] + public RenderFragment ChildContent { get; set; } = default!; + [Parameter] + [EditorRequired] + public TRequest RequestModel { get; set; } = default!; + [Parameter] + [EditorRequired] + public Func SaveFunc { get; set; } = default!; + [Parameter] + public Func? OnInitializedFunc { get; set; } + [Parameter] + [EditorRequired] + public string Title { get; set; } = default!; + [Parameter] + public bool IsCreate { get; set; } + [Parameter] + public string? SuccessMessage { get; set; } + + [CascadingParameter] + private MudDialogInstance MudDialog { get; set; } = default!; + + private CustomValidation? _customValidation; + + public void ForceRender() => StateHasChanged(); + + protected override Task OnInitializedAsync() => + OnInitializedFunc is not null + ? OnInitializedFunc() + : Task.CompletedTask; + + private async Task SaveAsync() + { + if (await ApiHelper.ExecuteCallGuardedAsync( + () => SaveFunc(RequestModel), Snackbar, _customValidation, SuccessMessage)) + { + MudDialog.Close(); + } + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/EntityClientTableContext.cs b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/EntityClientTableContext.cs new file mode 100644 index 0000000..2013d7b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/EntityClientTableContext.cs @@ -0,0 +1,67 @@ +namespace FSH.BlazorWebAssembly.Client.Components.EntityTable; + +/// +/// Initialization Context for the EntityTable Component. +/// Use this one if you want to use Client Paging, Sorting and Filtering. +/// +public class EntityClientTableContext + : EntityTableContext +{ + /// + /// A function that loads all the data for the table from the api and returns a ListResult of TEntity. + /// + public Func?>> LoadDataFunc { get; } + + /// + /// A function that returns a boolean which indicates whether the supplied entity meets the search criteria + /// (the supplied string is the search string entered). + /// + public Func SearchFunc { get; } + + public EntityClientTableContext( + List> fields, + Func?>> loadDataFunc, + Func searchFunc, + Func? idFunc = null, + Func>? getDefaultsFunc = null, + Func? createFunc = null, + Func>? getDetailsFunc = null, + Func? updateFunc = null, + Func? deleteFunc = null, + string? entityName = null, + string? entityNamePlural = null, + string? entityResource = null, + string? searchAction = null, + string? createAction = null, + string? updateAction = null, + string? deleteAction = null, + string? exportAction = null, + Func? editFormInitializedFunc = null, + Func? hasExtraActionsFunc = null, + Func? canUpdateEntityFunc = null, + Func? canDeleteEntityFunc = null) + : base( + fields, + idFunc, + getDefaultsFunc, + createFunc, + getDetailsFunc, + updateFunc, + deleteFunc, + entityName, + entityNamePlural, + entityResource, + searchAction, + createAction, + updateAction, + deleteAction, + exportAction, + editFormInitializedFunc, + hasExtraActionsFunc, + canUpdateEntityFunc, + canDeleteEntityFunc) + { + LoadDataFunc = loadDataFunc; + SearchFunc = searchFunc; + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/EntityField.cs b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/EntityField.cs new file mode 100644 index 0000000..75bf119 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/EntityField.cs @@ -0,0 +1,35 @@ +using Microsoft.AspNetCore.Components; + +namespace FSH.BlazorWebAssembly.Client.Components.EntityTable; + +public record EntityField(Func ValueFunc, string DisplayName, string SortLabel = "", Type? Type = null, RenderFragment? Template = null) +{ + /// + /// A function that returns the actual value of this field from the supplied entity. + /// + public Func ValueFunc { get; init; } = ValueFunc; + + /// + /// The string that's shown on the UI for this field. + /// + public string DisplayName { get; init; } = DisplayName; + + /// + /// The string that's sent to the api as property to sort on for this field. + /// This is only relevant when using server side sorting. + /// + public string SortLabel { get; init; } = SortLabel; + + /// + /// The type of the field. Default is string, but when boolean, it shows as a checkbox. + /// + public Type? Type { get; init; } = Type; + + /// + /// When supplied this template will be used for this field in stead of the default template. + /// For an example on how to do this, see . + /// + public RenderFragment? Template { get; init; } = Template; + + public bool CheckedForSearch { get; set; } = true; +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/EntityServerTableContext.cs b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/EntityServerTableContext.cs new file mode 100644 index 0000000..317d2d3 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/EntityServerTableContext.cs @@ -0,0 +1,73 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; + +namespace FSH.BlazorWebAssembly.Client.Components.EntityTable; + +/// +/// Initialization Context for the EntityTable Component. +/// Use this one if you want to use Server Paging, Sorting and Filtering. +/// +public class EntityServerTableContext + : EntityTableContext +{ + /// + /// A function that loads the specified page from the api with the specified search criteria + /// and returns a PaginatedResult of TEntity. + /// + public Func>> SearchFunc { get; } + + /// + /// A function that exports the specified data from the API. + /// + public Func>? ExportFunc { get; } + + public bool EnableAdvancedSearch { get; } + + public EntityServerTableContext( + List> fields, + Func>> searchFunc, + Func>? exportFunc = null, + bool enableAdvancedSearch = false, + Func? idFunc = null, + Func>? getDefaultsFunc = null, + Func? createFunc = null, + Func>? getDetailsFunc = null, + Func? updateFunc = null, + Func? deleteFunc = null, + string? entityName = null, + string? entityNamePlural = null, + string? entityResource = null, + string? searchAction = null, + string? createAction = null, + string? updateAction = null, + string? deleteAction = null, + string? exportAction = null, + Func? editFormInitializedFunc = null, + Func? hasExtraActionsFunc = null, + Func? canUpdateEntityFunc = null, + Func? canDeleteEntityFunc = null) + : base( + fields, + idFunc, + getDefaultsFunc, + createFunc, + getDetailsFunc, + updateFunc, + deleteFunc, + entityName, + entityNamePlural, + entityResource, + searchAction, + createAction, + updateAction, + deleteAction, + exportAction, + editFormInitializedFunc, + hasExtraActionsFunc, + canUpdateEntityFunc, + canDeleteEntityFunc) + { + SearchFunc = searchFunc; + ExportFunc = exportFunc; + EnableAdvancedSearch = enableAdvancedSearch; + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/EntityTable.razor b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/EntityTable.razor new file mode 100644 index 0000000..68221bd --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/EntityTable.razor @@ -0,0 +1,158 @@ +@typeparam TEntity +@typeparam TId +@typeparam TRequest + +@inject IJSRuntime JS +@inject IStringLocalizer L + + + + + + + @if (_canSearch && (Context.AdvancedSearchEnabled || AdvancedSearchContent is not null)) + { + + + + @if (Context.AdvancedSearchEnabled) + { +
+ + @foreach (var field in Context.Fields) + { + + } +
+ } + @AdvancedSearchContent + +
+ } + + + + +
+ @if (_canCreate) + { + @L["Create"] + } + @if (_canExport) + { + @L["Export"] + } + @L["Reload"] +
+ + @if (_canSearch && !_advancedSearchExpanded) + { + + + } +
+ + + @if (Context.Fields is not null) + { + foreach (var field in Context.Fields) + { + + @if (Context.IsClientContext) + { + @field.DisplayName + } + else + { + @field.DisplayName + } + + } + } + @L["Actions"] + + + + @foreach (var field in Context.Fields) + { + + @if (field.Template is not null) + { + @field.Template(context) + } + else if (field.Type == typeof(bool)) + { + + } + else + { + + } + + } + + @if (ActionsContent is not null) + { + @ActionsContent(context) + } + else if (HasActions) + { + + @if (CanUpdateEntity(context)) + { + @L["Edit"] + } + @if (CanDeleteEntity(context)) + { + @L["Delete"] + } + @if (ExtraActions is not null) + { + @ExtraActions(context) + } + + } + else + { + + @L["No Allowed Actions"] + + } + + + + + + + +
+ +
+ + + +
\ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/EntityTable.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/EntityTable.razor.cs new file mode 100644 index 0000000..63ec907 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/EntityTable.razor.cs @@ -0,0 +1,321 @@ +using FSH.BlazorWebAssembly.Client.Components.Dialogs; +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using FSH.BlazorWebAssembly.Client.Infrastructure.Auth; +using FSH.BlazorWebAssembly.Client.Shared; +using Mapster; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; +using Microsoft.JSInterop; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Components.EntityTable; + +public partial class EntityTable + where TRequest : new() +{ + [Parameter] + [EditorRequired] + public EntityTableContext Context { get; set; } = default!; + + [Parameter] + public bool Loading { get; set; } + + [Parameter] + public string? SearchString { get; set; } + [Parameter] + public EventCallback SearchStringChanged { get; set; } + + [Parameter] + public RenderFragment? AdvancedSearchContent { get; set; } + + [Parameter] + public RenderFragment? ActionsContent { get; set; } + [Parameter] + public RenderFragment? ExtraActions { get; set; } + [Parameter] + public RenderFragment? ChildRowContent { get; set; } + + [Parameter] + public RenderFragment? EditFormContent { get; set; } + + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + [Inject] + protected IAuthorizationService AuthService { get; set; } = default!; + + private bool _canSearch; + private bool _canCreate; + private bool _canUpdate; + private bool _canDelete; + private bool _canExport; + + private bool _advancedSearchExpanded; + + private MudTable _table = default!; + private IEnumerable? _entityList; + private int _totalItems; + + protected override async Task OnInitializedAsync() + { + var state = await AuthState; + _canSearch = await CanDoActionAsync(Context.SearchAction, state); + _canCreate = await CanDoActionAsync(Context.CreateAction, state); + _canUpdate = await CanDoActionAsync(Context.UpdateAction, state); + _canDelete = await CanDoActionAsync(Context.DeleteAction, state); + _canExport = await CanDoActionAsync(Context.ExportAction, state); + + await LocalLoadDataAsync(); + } + + public Task ReloadDataAsync() => + Context.IsClientContext + ? LocalLoadDataAsync() + : ServerLoadDataAsync(); + + private async Task CanDoActionAsync(string? action, AuthenticationState state) => + !string.IsNullOrWhiteSpace(action) && + ((bool.TryParse(action, out bool isTrue) && isTrue) || // check if action equals "True", then it's allowed + (Context.EntityResource is { } resource && await AuthService.HasPermissionAsync(state.User, action, resource))); + + private bool HasActions => _canUpdate || _canDelete || (Context.HasExtraActionsFunc is not null && Context.HasExtraActionsFunc()); + private bool CanUpdateEntity(TEntity entity) => _canUpdate && (Context.CanUpdateEntityFunc is null || Context.CanUpdateEntityFunc(entity)); + private bool CanDeleteEntity(TEntity entity) => _canDelete && (Context.CanDeleteEntityFunc is null || Context.CanDeleteEntityFunc(entity)); + + // Client side paging/filtering + private bool LocalSearch(TEntity entity) => + Context.ClientContext?.SearchFunc is { } searchFunc + ? searchFunc(SearchString, entity) + : string.IsNullOrWhiteSpace(SearchString); + + private async Task LocalLoadDataAsync() + { + if (Loading || Context.ClientContext is null) + { + return; + } + + Loading = true; + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => Context.ClientContext.LoadDataFunc(), Snackbar) + is List result) + { + _entityList = result; + } + + Loading = false; + } + + // Server Side paging/filtering + + private async Task OnSearchStringChanged(string? text = null) + { + await SearchStringChanged.InvokeAsync(SearchString); + + await ServerLoadDataAsync(); + } + + private async Task ServerLoadDataAsync() + { + if (Context.IsServerContext) + { + await _table.ReloadServerData(); + } + } + + private Func>>? ServerReloadFunc => + Context.IsServerContext ? ServerReload : null; + + private async Task> ServerReload(TableState state) + { + if (!Loading && Context.ServerContext is not null) + { + Loading = true; + + var filter = GetPaginationFilter(state); + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => Context.ServerContext.SearchFunc(filter), Snackbar) + is { } result) + { + _totalItems = result.TotalCount; + _entityList = result.Data; + } + + Loading = false; + } + + return new TableData { TotalItems = _totalItems, Items = _entityList }; + } + + private async Task ExportAsync() + { + if (!Loading && Context.ServerContext is not null) + { + if (Context.ServerContext.ExportFunc is not null) + { + Loading = true; + + var filter = GetBaseFilter(); + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => Context.ServerContext.ExportFunc(filter), Snackbar) + is { } result) + { + using var streamRef = new DotNetStreamReference(result.Stream); + await JS.InvokeVoidAsync("downloadFileFromStream", $"{Context.EntityNamePlural}.xlsx", streamRef); + } + + Loading = false; + } + } + } + + private PaginationFilter GetPaginationFilter(TableState state) + { + string[]? orderings = null; + if (!string.IsNullOrEmpty(state.SortLabel)) + { + orderings = state.SortDirection == SortDirection.None + ? new[] { $"{state.SortLabel}" } + : new[] { $"{state.SortLabel} {state.SortDirection}" }; + } + + var filter = new PaginationFilter + { + PageSize = state.PageSize, + PageNumber = state.Page + 1, + Keyword = SearchString, + OrderBy = orderings ?? Array.Empty() + }; + + if (!Context.AllColumnsChecked) + { + filter.AdvancedSearch = new() + { + Fields = Context.SearchFields, + Keyword = filter.Keyword + }; + filter.Keyword = null; + } + + return filter; + } + + private BaseFilter GetBaseFilter() + { + var filter = new BaseFilter + { + Keyword = SearchString, + }; + + if (!Context.AllColumnsChecked) + { + filter.AdvancedSearch = new() + { + Fields = Context.SearchFields, + Keyword = filter.Keyword + }; + filter.Keyword = null; + } + + return filter; + } + + private async Task InvokeModal(TEntity? entity = default) + { + bool isCreate = entity is null; + + var parameters = new DialogParameters() + { + { nameof(AddEditModal.ChildContent), EditFormContent }, + { nameof(AddEditModal.OnInitializedFunc), Context.EditFormInitializedFunc }, + { nameof(AddEditModal.IsCreate), isCreate } + }; + + Func saveFunc; + TRequest requestModel; + string title, successMessage; + + if (isCreate) + { + _ = Context.CreateFunc ?? throw new InvalidOperationException("CreateFunc can't be null!"); + + saveFunc = Context.CreateFunc; + + requestModel = + Context.GetDefaultsFunc is not null + && await ApiHelper.ExecuteCallGuardedAsync( + () => Context.GetDefaultsFunc(), Snackbar) + is { } defaultsResult + ? defaultsResult + : new TRequest(); + + title = $"{L["Create"]} {Context.EntityName}"; + successMessage = $"{Context.EntityName} {L["Created"]}"; + } + else + { + _ = Context.IdFunc ?? throw new InvalidOperationException("IdFunc can't be null!"); + _ = Context.UpdateFunc ?? throw new InvalidOperationException("UpdateFunc can't be null!"); + + var id = Context.IdFunc(entity!); + + saveFunc = request => Context.UpdateFunc(id, request); + + requestModel = + Context.GetDetailsFunc is not null + && await ApiHelper.ExecuteCallGuardedAsync( + () => Context.GetDetailsFunc(id!), + Snackbar) + is { } detailsResult + ? detailsResult + : entity!.Adapt(); + + title = $"{L["Edit"]} {Context.EntityName}"; + successMessage = $"{Context.EntityName} {L["Updated"]}"; + } + + parameters.Add(nameof(AddEditModal.SaveFunc), saveFunc); + parameters.Add(nameof(AddEditModal.RequestModel), requestModel); + parameters.Add(nameof(AddEditModal.Title), title); + parameters.Add(nameof(AddEditModal.SuccessMessage), successMessage); + + var dialog = DialogService.ShowModal>(parameters); + + Context.SetAddEditModalRef(dialog); + + var result = await dialog.Result; + + if (!result.Cancelled) + { + await ReloadDataAsync(); + } + } + + private async Task Delete(TEntity entity) + { + _ = Context.IdFunc ?? throw new InvalidOperationException("IdFunc can't be null!"); + TId id = Context.IdFunc(entity); + + string deleteContent = L["You're sure you want to delete {0} with id '{1}'?"]; + var parameters = new DialogParameters + { + { nameof(DeleteConfirmation.ContentText), string.Format(deleteContent, Context.EntityName, id) } + }; + var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true, DisableBackdropClick = true }; + var dialog = DialogService.Show(L["Delete"], parameters, options); + var result = await dialog.Result; + if (!result.Cancelled) + { + _ = Context.DeleteFunc ?? throw new InvalidOperationException("DeleteFunc can't be null!"); + + await ApiHelper.ExecuteCallGuardedAsync( + () => Context.DeleteFunc(id), + Snackbar); + + await ReloadDataAsync(); + } + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/EntityTableContext.cs b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/EntityTableContext.cs new file mode 100644 index 0000000..7054adc --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/EntityTableContext.cs @@ -0,0 +1,197 @@ +using FSH.WebApi.Shared.Authorization; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Components.EntityTable; + +/// +/// Abstract base class for the initialization Context of the EntityTable Component. +/// +/// The type of the entity. +/// The type of the id of the entity. +/// The type of the Request which is used on the AddEditModal and which is sent with the CreateFunc and UpdateFunc. +public abstract class EntityTableContext +{ + /// + /// The columns you want to display on the table. + /// + public List> Fields { get; } + + /// + /// A function that returns the Id of the entity. This is only needed when using the CRUD functionality. + /// + public Func? IdFunc { get; } + + /// + /// A function that executes the GetDefaults method on the api (or supplies defaults locally) and returns + /// a Task of Result of TRequest. When not supplied, a TRequest is simply newed up. + /// No need to check for error messages or api exceptions. These are automatically handled by the component. + /// + public Func>? GetDefaultsFunc { get; } + + /// + /// A function that executes the Create method on the api with the supplied entity and returns a Task of Result. + /// No need to check for error messages or api exceptions. These are automatically handled by the component. + /// + public Func? CreateFunc { get; } + + /// + /// A function that executes the GetDetails method on the api with the supplied Id and returns a Task of Result of TRequest. + /// No need to check for error messages or api exceptions. These are automatically handled by the component. + /// When not supplied, the TEntity out of the _entityList is supplied using the IdFunc and converted using mapster. + /// + public Func>? GetDetailsFunc { get; } + + /// + /// A function that executes the Update method on the api with the supplied entity and returns a Task of Result. + /// When not supplied, the TEntity from the list is mapped to TCreateRequest using mapster. + /// No need to check for error messages or api exceptions. These are automatically handled by the component. + /// + public Func? UpdateFunc { get; } + + /// + /// A function that executes the Delete method on the api with the supplied entity id and returns a Task of Result. + /// No need to check for error messages or api exceptions. These are automatically handled by the component. + /// + public Func? DeleteFunc { get; } + + /// + /// The name of the entity. This is used in the title of the add/edit modal and delete confirmation. + /// + public string? EntityName { get; } + + /// + /// The plural name of the entity. This is used in the "Search for ..." placeholder. + /// + public string? EntityNamePlural { get; } + + /// + /// The FSHResource that is representing this entity. This is used in combination with the xxActions to check for permissions. + /// + public string? EntityResource { get; } + + /// + /// The FSHAction name of the search permission. This is FSHAction.Search by default. + /// When empty, no search functionality will be available. + /// When the string is "true", search funtionality will be enabled, + /// otherwise it will only be enabled if the user has permission for this action on the EntityResource. + /// + public string SearchAction { get; } + + /// + /// The permission name of the create permission. This is FSHAction.Create by default. + /// When empty, no create functionality will be available. + /// When the string "true", create funtionality will be enabled, + /// otherwise it will only be enabled if the user has permission for this action on the EntityResource. + /// + public string CreateAction { get; } + + /// + /// The permission name of the update permission. This is FSHAction.Update by default. + /// When empty, no update functionality will be available. + /// When the string is "true", update funtionality will be enabled, + /// otherwise it will only be enabled if the user has permission for this action on the EntityResource. + /// + public string UpdateAction { get; } + + /// + /// The permission name of the delete permission. This is FSHAction.Delete by default. + /// When empty, no delete functionality will be available. + /// When the string is "true", delete funtionality will be enabled, + /// otherwise it will only be enabled if the user has permission for this action on the EntityResource. + /// + public string DeleteAction { get; } + + /// + /// The permission name of the export permission. This is FSHAction.Export by default. + /// + public string ExportAction { get; } + + /// + /// Use this if you want to run initialization during OnInitialized of the AddEdit form. + /// + public Func? EditFormInitializedFunc { get; } + + /// + /// Use this if you want to check for permissions of content in the ExtraActions RenderFragment. + /// The extra actions won't be available when this returns false. + /// + public Func? HasExtraActionsFunc { get; set; } + + /// + /// Use this if you want to disable the update functionality for specific entities in the table. + /// + public Func? CanUpdateEntityFunc { get; set; } + + /// + /// Use this if you want to disable the delete functionality for specific entities in the table. + /// + public Func? CanDeleteEntityFunc { get; set; } + + public EntityTableContext( + List> fields, + Func? idFunc, + Func>? getDefaultsFunc, + Func? createFunc, + Func>? getDetailsFunc, + Func? updateFunc, + Func? deleteFunc, + string? entityName, + string? entityNamePlural, + string? entityResource, + string? searchAction, + string? createAction, + string? updateAction, + string? deleteAction, + string? exportAction, + Func? editFormInitializedFunc, + Func? hasExtraActionsFunc, + Func? canUpdateEntityFunc, + Func? canDeleteEntityFunc) + { + EntityResource = entityResource; + Fields = fields; + EntityName = entityName; + EntityNamePlural = entityNamePlural; + IdFunc = idFunc; + GetDefaultsFunc = getDefaultsFunc; + CreateFunc = createFunc; + GetDetailsFunc = getDetailsFunc; + UpdateFunc = updateFunc; + DeleteFunc = deleteFunc; + SearchAction = searchAction ?? FSHAction.Search; + CreateAction = createAction ?? FSHAction.Create; + UpdateAction = updateAction ?? FSHAction.Update; + DeleteAction = deleteAction ?? FSHAction.Delete; + ExportAction = exportAction ?? FSHAction.Export; + EditFormInitializedFunc = editFormInitializedFunc; + HasExtraActionsFunc = hasExtraActionsFunc; + CanUpdateEntityFunc = canUpdateEntityFunc; + CanDeleteEntityFunc = canDeleteEntityFunc; + } + + // AddEdit modal + private IDialogReference? _addEditModalRef; + + internal void SetAddEditModalRef(IDialogReference dialog) => + _addEditModalRef = dialog; + + public IAddEditModal AddEditModal => + _addEditModalRef?.Dialog as IAddEditModal + ?? throw new InvalidOperationException("AddEditModal is only available when the modal is shown."); + + // Shortcuts + public EntityClientTableContext? ClientContext => this as EntityClientTableContext; + public EntityServerTableContext? ServerContext => this as EntityServerTableContext; + public bool IsClientContext => ClientContext is not null; + public bool IsServerContext => ServerContext is not null; + + // Advanced Search + public bool AllColumnsChecked => + Fields.All(f => f.CheckedForSearch); + public void AllColumnsCheckChanged(bool checkAll) => + Fields.ForEach(f => f.CheckedForSearch = checkAll); + public bool AdvancedSearchEnabled => + ServerContext?.EnableAdvancedSearch is true; + public List SearchFields => + Fields.Where(f => f.CheckedForSearch).Select(f => f.SortLabel).ToList(); +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/IAddEditModal.cs b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/IAddEditModal.cs new file mode 100644 index 0000000..397d81d --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/IAddEditModal.cs @@ -0,0 +1,8 @@ +namespace FSH.BlazorWebAssembly.Client.Components.EntityTable; + +public interface IAddEditModal +{ + TRequest RequestModel { get; } + bool IsCreate { get; } + void ForceRender(); +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/PaginationResponse.cs b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/PaginationResponse.cs new file mode 100644 index 0000000..404eb6a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/EntityTable/PaginationResponse.cs @@ -0,0 +1,9 @@ +namespace FSH.BlazorWebAssembly.Client.Components.EntityTable; + +public class PaginationResponse +{ + public List Data { get; set; } = default!; + public int TotalCount { get; set; } + public int CurrentPage { get; set; } = 1; + public int PageSize { get; set; } = 10; +} diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/Localization/LanguageSelector.razor b/blazor-wasm-boilerplate-main/src/Client/Components/Localization/LanguageSelector.razor new file mode 100644 index 0000000..0305761 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/Localization/LanguageSelector.razor @@ -0,0 +1,41 @@ +@inject IStringLocalizer L + + + + @foreach (var language in LocalizationConstants.SupportedLanguages) + { + if (language.Code == CurrentLanguage) + { + @L[language.DisplayName] + } + else + { + @L[language.DisplayName] + } + } + + + +@code { + public string? CurrentLanguage { get; set; } = "en-US"; + + protected override async Task OnInitializedAsync() + { + var currentPreference = await ClientPreferences.GetPreference() as ClientPreference; + if (currentPreference != null) + { + CurrentLanguage = currentPreference.LanguageCode; + } + else + { + CurrentLanguage = "en-US"; + } + + } + private async Task ChangeLanguageAsync(string languageCode) + { + var result = await ClientPreferences.ChangeLanguageAsync(languageCode); + Navigation.NavigateTo(Navigation.Uri, forceLoad: true); + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/Notifications/NotificationConnection.razor b/blazor-wasm-boilerplate-main/src/Client/Components/Notifications/NotificationConnection.razor new file mode 100644 index 0000000..6d04cdf --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/Notifications/NotificationConnection.razor @@ -0,0 +1,3 @@ + + @ChildContent + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/Notifications/NotificationConnection.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Components/Notifications/NotificationConnection.razor.cs new file mode 100644 index 0000000..f5e7904 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/Notifications/NotificationConnection.razor.cs @@ -0,0 +1,153 @@ +using System.Net; +using System.Reflection; +using System.Text.Json; +using System.Text.Json.Nodes; +using FSH.BlazorWebAssembly.Client.Infrastructure.Auth; +using FSH.BlazorWebAssembly.Client.Infrastructure.Common; +using FSH.BlazorWebAssembly.Client.Infrastructure.Notifications; +using FSH.WebApi.Shared.Notifications; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; +using Microsoft.AspNetCore.SignalR.Client; + +namespace FSH.BlazorWebAssembly.Client.Components.Notifications; + +public partial class NotificationConnection : IDisposable, IAsyncDisposable +{ + [Parameter] + public RenderFragment ChildContent { get; set; } = default!; + [Inject] + private IAccessTokenProvider TokenProvider { get; set; } = default!; + [Inject] + private INotificationPublisher Publisher { get; set; } = default!; + [Inject] + private IAuthenticationService AuthService { get; set; } = default!; + [Inject] + private ILogger Logger { get; set; } = default!; + + private readonly CancellationTokenSource _cts = new(); + private IDisposable? _subscription; + private HubConnection? _hubConnection; + + public ConnectionState ConnectionState => + _hubConnection?.State switch + { + HubConnectionState.Connected => ConnectionState.Connected, + HubConnectionState.Disconnected => ConnectionState.Disconnected, + _ => ConnectionState.Connecting + }; + + public string? ConnectionId => _hubConnection?.ConnectionId; + + protected override Task OnInitializedAsync() + { + _hubConnection = new HubConnectionBuilder() + .WithUrl($"{Config[ConfigNames.ApiBaseUrl]}notifications", options => + options.AccessTokenProvider = + () => TokenProvider.GetAccessTokenAsync()) + .WithAutomaticReconnect(new IndefiniteRetryPolicy()) + .Build(); + + _hubConnection.Reconnecting += ex => + OnConnectionStateChangedAsync(ConnectionState.Connecting, ex?.Message); + + _hubConnection.Reconnected += id => + OnConnectionStateChangedAsync(ConnectionState.Connected, id); + + _hubConnection.Closed += async ex => + { + await OnConnectionStateChangedAsync(ConnectionState.Disconnected, ex?.Message); + + // This shouldn't happen with the IndefiniteRetryPolicy configured above, + // but just in case it does, we wait a bit and restart the connection again. + await Task.Delay(5000, _cts.Token); + await ConnectWithRetryAsync(_cts.Token); + }; + + _subscription = _hubConnection.On(NotificationConstants.NotificationFromServer, (notificationTypeName, notificationJson) => + { + if (Assembly.GetAssembly(typeof(INotificationMessage))!.GetType(notificationTypeName) + is { } notificationType + && notificationJson.Deserialize( + notificationType, + new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }) + is INotificationMessage notification) + { + return Publisher.PublishAsync(notification); + } + + Logger.LogError("Invalid Notification Received ({name}).", notificationTypeName); + + return Task.CompletedTask; + }); + + // launch the signalR connection in the background. + // see https://www.dotnetcurry.com/aspnet-core/realtime-app-using-blazor-webassembly-signalr-csharp9 + _ = ConnectWithRetryAsync(_cts.Token); + + return base.OnInitializedAsync(); + } + + protected virtual Task OnConnectionStateChangedAsync(ConnectionState state, string? message) + { + return Publisher.PublishAsync(new ConnectionStateChanged(state, message)); + } + + private async Task ConnectWithRetryAsync(CancellationToken cancellationToken) + { + _ = _hubConnection ?? throw new InvalidOperationException("HubConnection can't be null."); + + // Keep trying to until we can start or the token is canceled. + while (true) + { + try + { + await _hubConnection.StartAsync(cancellationToken); + await OnConnectionStateChangedAsync(ConnectionState.Connected, _hubConnection.ConnectionId); + return; + } + catch when (cancellationToken.IsCancellationRequested) + { + return; + } + catch (HttpRequestException requestException) when (requestException.StatusCode == HttpStatusCode.Unauthorized) + { + // This shouldn't happen, but just in case, redirect to logout. + await AuthService.LogoutAsync(); + return; + } + catch + { + // Try again in a few seconds. This could be an incremental interval + await Task.Delay(5000, cancellationToken); + } + } + } + + public void Dispose() + { + _cts.Cancel(); + _cts.Dispose(); + _subscription?.Dispose(); + } + + public async ValueTask DisposeAsync() + { + if (_hubConnection is not null) + { + await _hubConnection.DisposeAsync(); + } + } +} + +internal class IndefiniteRetryPolicy : IRetryPolicy +{ + public TimeSpan? NextRetryDelay(RetryContext retryContext) => + retryContext.PreviousRetryCount switch + { + 0 => TimeSpan.Zero, + 1 => TimeSpan.FromSeconds(2), + 2 => TimeSpan.FromSeconds(5), + _ => TimeSpan.FromSeconds(10) + }; +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/Notifications/NotificationConnectionStatus.razor b/blazor-wasm-boilerplate-main/src/Client/Components/Notifications/NotificationConnectionStatus.razor new file mode 100644 index 0000000..78bea4a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/Notifications/NotificationConnectionStatus.razor @@ -0,0 +1,49 @@ +@inject ICourier Courier + + + + + +@code { + public string TooltipText { get; set; } = "No Connection"; + public string Icon { get; set; } = Icons.Filled.SignalWifi0Bar; + public Color IconColor { get; set; } = Color.Error; + + [CascadingParameter] private NotificationConnection _notifications { get; set; } = default!; + + protected override void OnInitialized() + { + SetConnectionState(_notifications.ConnectionState, _notifications.ConnectionId); + + Courier.SubscribeWeak>(wrapper => + { + SetConnectionState(wrapper.Notification.State, wrapper.Notification.Message); + StateHasChanged(); + }); + } + + private void SetConnectionState(ConnectionState state, string? message) + { + switch (state) + { + case ConnectionState.Connected: + TooltipText = $"Connected to Server with ConnectionId {message}"; + Icon = @Icons.Filled.SignalWifiStatusbar4Bar; + IconColor = Color.Success; + break; + + case ConnectionState.Connecting: + TooltipText = $"(Re)connecting... ({message})."; + Icon = @Icons.Filled.SignalWifiStatusbarConnectedNoInternet4; + IconColor = Color.Warning; + break; + + case ConnectionState.Disconnected: + TooltipText = $"Connection Closed ({message})."; + Icon = @Icons.Filled.SignalWifiOff; + IconColor = Color.Error; + break; + } + StateHasChanged(); + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/ColorPanel.razor b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/ColorPanel.razor new file mode 100644 index 0000000..2b90017 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/ColorPanel.razor @@ -0,0 +1,27 @@ + + +
+ @ColorType + + +
+
+ + + + + @foreach (var color in Colors) + { + + +
+
+
+
+ } +
+
+
+
+
\ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/ColorPanel.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/ColorPanel.razor.cs new file mode 100644 index 0000000..b375554 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/ColorPanel.razor.cs @@ -0,0 +1,24 @@ +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Components.ThemeManager; + +public partial class ColorPanel +{ + [Parameter] + public List Colors { get; set; } = new(); + + [Parameter] + public string ColorType { get; set; } = string.Empty; + + [Parameter] + public Color CurrentColor { get; set; } + + [Parameter] + public EventCallback OnColorClicked { get; set; } + + protected async Task ColorClicked(string color) + { + await OnColorClicked.InvokeAsync(color); + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/DarkModePanel.razor b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/DarkModePanel.razor new file mode 100644 index 0000000..1f983fc --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/DarkModePanel.razor @@ -0,0 +1,17 @@ + + +
+ @if (_isDarkMode) + { + Light Mode + } + else + { + Dark Mode + } + +
+
+
\ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/DarkModePanel.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/DarkModePanel.razor.cs new file mode 100644 index 0000000..44ba401 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/DarkModePanel.razor.cs @@ -0,0 +1,24 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.Preferences; +using Microsoft.AspNetCore.Components; + +namespace FSH.BlazorWebAssembly.Client.Components.ThemeManager; + +public partial class DarkModePanel +{ + private bool _isDarkMode; + + protected override async Task OnInitializedAsync() + { + if (await ClientPreferences.GetPreference() is not ClientPreference themePreference) themePreference = new ClientPreference(); + _isDarkMode = themePreference.IsDarkMode; + } + + [Parameter] + public EventCallback OnIconClicked { get; set; } + + private async Task ToggleDarkMode() + { + _isDarkMode = !_isDarkMode; + await OnIconClicked.InvokeAsync(_isDarkMode); + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/RadiusPanel.razor b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/RadiusPanel.razor new file mode 100644 index 0000000..56e42f2 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/RadiusPanel.razor @@ -0,0 +1,15 @@ + + +
+ Border Radius + @Radius.ToString() + +
+
+ + + @Radius.ToString() + +
\ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/RadiusPanel.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/RadiusPanel.razor.cs new file mode 100644 index 0000000..ffef58d --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/RadiusPanel.razor.cs @@ -0,0 +1,28 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.Preferences; +using Microsoft.AspNetCore.Components; + +namespace FSH.BlazorWebAssembly.Client.Components.ThemeManager; + +public partial class RadiusPanel +{ + [Parameter] + public double Radius { get; set; } + + [Parameter] + public double MaxValue { get; set; } = 30; + + [Parameter] + public EventCallback OnSliderChanged { get; set; } + + protected override async Task OnInitializedAsync() + { + if (await ClientPreferences.GetPreference() is not ClientPreference themePreference) themePreference = new ClientPreference(); + Radius = themePreference.BorderRadius; + } + + private async Task ChangedSelection(ChangeEventArgs args) + { + Radius = int.Parse(args?.Value?.ToString() ?? "0"); + await OnSliderChanged.InvokeAsync(Radius); + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/TableCustomizationPanel.razor b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/TableCustomizationPanel.razor new file mode 100644 index 0000000..e10ea10 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/TableCustomizationPanel.razor @@ -0,0 +1,19 @@ + + +
+ Table Customization + T + +
+
+ + + + + + +
\ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/TableCustomizationPanel.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/TableCustomizationPanel.razor.cs new file mode 100644 index 0000000..e4b3c63 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/TableCustomizationPanel.razor.cs @@ -0,0 +1,74 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.Notifications; +using FSH.BlazorWebAssembly.Client.Infrastructure.Preferences; +using Microsoft.AspNetCore.Components; + +namespace FSH.BlazorWebAssembly.Client.Components.ThemeManager; + +public partial class TableCustomizationPanel +{ + [Parameter] + public bool IsDense { get; set; } + [Parameter] + public bool IsStriped { get; set; } + [Parameter] + public bool HasBorder { get; set; } + [Parameter] + public bool IsHoverable { get; set; } + [Inject] + protected INotificationPublisher Notifications { get; set; } = default!; + + private FshTablePreference _tablePreference = new(); + + protected override async Task OnInitializedAsync() + { + if (await ClientPreferences.GetPreference() is ClientPreference clientPreference) + { + _tablePreference = clientPreference.TablePreference; + } + + IsDense = _tablePreference.IsDense; + IsStriped = _tablePreference.IsStriped; + HasBorder = _tablePreference.HasBorder; + IsHoverable = _tablePreference.IsHoverable; + } + + [Parameter] + public EventCallback OnDenseSwitchToggled { get; set; } + + [Parameter] + public EventCallback OnStripedSwitchToggled { get; set; } + + [Parameter] + public EventCallback OnBorderdedSwitchToggled { get; set; } + + [Parameter] + public EventCallback OnHoverableSwitchToggled { get; set; } + + private async Task ToggleDenseSwitch() + { + _tablePreference.IsDense = !_tablePreference.IsDense; + await OnDenseSwitchToggled.InvokeAsync(_tablePreference.IsDense); + await Notifications.PublishAsync(_tablePreference); + } + + private async Task ToggleStripedSwitch() + { + _tablePreference.IsStriped = !_tablePreference.IsStriped; + await OnStripedSwitchToggled.InvokeAsync(_tablePreference.IsStriped); + await Notifications.PublishAsync(_tablePreference); + } + + private async Task ToggleBorderedSwitch() + { + _tablePreference.HasBorder = !_tablePreference.HasBorder; + await OnBorderdedSwitchToggled.InvokeAsync(_tablePreference.HasBorder); + await Notifications.PublishAsync(_tablePreference); + } + + private async Task ToggleHoverableSwitch() + { + _tablePreference.IsHoverable = !_tablePreference.IsHoverable; + await OnHoverableSwitchToggled.InvokeAsync(_tablePreference.IsHoverable); + await Notifications.PublishAsync(_tablePreference); + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/ThemeButton.razor b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/ThemeButton.razor new file mode 100644 index 0000000..364ecc5 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/ThemeButton.razor @@ -0,0 +1,16 @@ +
+ + + +
+ + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/ThemeButton.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/ThemeButton.razor.cs new file mode 100644 index 0000000..2131465 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/ThemeButton.razor.cs @@ -0,0 +1,10 @@ +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Web; + +namespace FSH.BlazorWebAssembly.Client.Components.ThemeManager; + +public partial class ThemeButton +{ + [Parameter] + public EventCallback OnClick { get; set; } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/ThemeDrawer.razor b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/ThemeDrawer.razor new file mode 100644 index 0000000..1ee685d --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/ThemeDrawer.razor @@ -0,0 +1,28 @@ + + + + Theme Manager + + + + + +
+ + + + + + + +
+
+ \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/ThemeDrawer.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/ThemeDrawer.razor.cs new file mode 100644 index 0000000..8ef41f5 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Components/ThemeManager/ThemeDrawer.razor.cs @@ -0,0 +1,96 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.Preferences; +using FSH.BlazorWebAssembly.Client.Infrastructure.Theme; +using Microsoft.AspNetCore.Components; + +namespace FSH.BlazorWebAssembly.Client.Components.ThemeManager; + +public partial class ThemeDrawer +{ + [Parameter] + public bool ThemeDrawerOpen { get; set; } + + [Parameter] + public EventCallback ThemeDrawerOpenChanged { get; set; } + + [EditorRequired] + [Parameter] + public ClientPreference ThemePreference { get; set; } = default!; + + [EditorRequired] + [Parameter] + public EventCallback ThemePreferenceChanged { get; set; } + + private readonly List _colors = CustomColors.ThemeColors; + + private async Task UpdateThemePrimaryColor(string color) + { + if (ThemePreference is not null) + { + ThemePreference.PrimaryColor = color; + await ThemePreferenceChanged.InvokeAsync(ThemePreference); + } + } + + private async Task UpdateThemeSecondaryColor(string color) + { + if (ThemePreference is not null) + { + ThemePreference.SecondaryColor = color; + await ThemePreferenceChanged.InvokeAsync(ThemePreference); + } + } + + private async Task UpdateBorderRadius(double radius) + { + if (ThemePreference is not null) + { + ThemePreference.BorderRadius = radius; + await ThemePreferenceChanged.InvokeAsync(ThemePreference); + } + } + + private async Task ToggleDarkLightMode(bool isDarkMode) + { + if (ThemePreference is not null) + { + ThemePreference.IsDarkMode = isDarkMode; + await ThemePreferenceChanged.InvokeAsync(ThemePreference); + } + } + + private async Task ToggleEntityTableDense(bool isDense) + { + if (ThemePreference is not null) + { + ThemePreference.TablePreference.IsDense = isDense; + await ThemePreferenceChanged.InvokeAsync(ThemePreference); + } + } + + private async Task ToggleEntityTableStriped(bool isStriped) + { + if (ThemePreference is not null) + { + ThemePreference.TablePreference.IsStriped = isStriped; + await ThemePreferenceChanged.InvokeAsync(ThemePreference); + } + } + + private async Task ToggleEntityTableBorder(bool hasBorder) + { + if (ThemePreference is not null) + { + ThemePreference.TablePreference.HasBorder = hasBorder; + await ThemePreferenceChanged.InvokeAsync(ThemePreference); + } + } + + private async Task ToggleEntityTableHoverable(bool isHoverable) + { + if (ThemePreference is not null) + { + ThemePreference.TablePreference.IsHoverable = isHoverable; + await ThemePreferenceChanged.InvokeAsync(ThemePreference); + } + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/Authentication.razor b/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/Authentication.razor new file mode 100644 index 0000000..08b90bc --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/Authentication.razor @@ -0,0 +1,74 @@ +@page "/authentication/{action}" +@attribute [AllowAnonymous] + +@inject IStringLocalizer L + + + @* Override the different child items to adapt them to our own style + I've done this for LogOutSucceeded now, already added the rest but with the defaults (and localization). *@ + + + + @L["You were successfully logged out."] + + + + + @L["Click here to log back in"]. + + + + + @L["Logging you in..."] + + + @L["Checking permissions..."] + + + + + @L["Sorry, your login failed. Please try again or contact support."] + + + @if (GetMessage() is string message && !string.IsNullOrWhiteSpace(message)) + { + + @message + + } + + + @L["Logging you out..."] + + + @L["Logging you out..."] + + + @L["Sorry, log out operation failed. Please try again or contact support."] + + + @L["Retrieving profile..."] + + + @L["Registering account..."] + + + +@code { + [Parameter] public string? Action { get; set; } + + private void GoHome() => Navigation.NavigateTo("/"); + + private string? GetMessage() + { + var query = Navigation.ToAbsoluteUri(Navigation.Uri).Query; + + if (!string.IsNullOrWhiteSpace(query) + && QueryHelpers.ParseQuery(query).TryGetValue("message", out var message)) + { + return message.ToString(); + } + + return null; + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/ForgotPassword.razor b/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/ForgotPassword.razor new file mode 100644 index 0000000..73d9b51 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/ForgotPassword.razor @@ -0,0 +1,45 @@ +@page "/account/forgot-password" +@attribute [AllowAnonymous] +@inject IStringLocalizer L +@inject IStringLocalizer LS + + + + + + + + +
+ +
+
+ @L["Forgot Password?"] + + @L["We can help you by resetting your password."] +
+
+
+
+ + + + + + + + + + + + + + + @L["Forgot Password"] + +
+
\ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/ForgotPassword.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/ForgotPassword.razor.cs new file mode 100644 index 0000000..005815f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/ForgotPassword.razor.cs @@ -0,0 +1,31 @@ +using FSH.BlazorWebAssembly.Client.Components.Common; +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using FSH.BlazorWebAssembly.Client.Shared; +using FSH.WebApi.Shared.Multitenancy; +using Microsoft.AspNetCore.Components; + +namespace FSH.BlazorWebAssembly.Client.Pages.Authentication; + +public partial class ForgotPassword +{ + private readonly ForgotPasswordRequest _forgotPasswordRequest = new(); + private CustomValidation? _customValidation; + private bool BusySubmitting { get; set; } + + [Inject] + private IUsersClient UsersClient { get; set; } = default!; + + private string Tenant { get; set; } = MultitenancyConstants.Root.Id; + + private async Task SubmitAsync() + { + BusySubmitting = true; + + await ApiHelper.ExecuteCallGuardedAsync( + () => UsersClient.ForgotPasswordAsync(Tenant, _forgotPasswordRequest), + Snackbar, + _customValidation); + + BusySubmitting = false; + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/Login.razor b/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/Login.razor new file mode 100644 index 0000000..2ca6929 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/Login.razor @@ -0,0 +1,47 @@ +@page "/login" +@attribute [AllowAnonymous] +@inject IStringLocalizer L +@inject IStringLocalizer LS + +
+ +
+
+ Sign In + @L["Enter your credentials to get started."] + +
+
+ + + + + + + + + + + + + + + + @L["Register?"] + + + @L["Forgot password?"] + + + @L["Sign In"] + + + @L["Fill Administrator Credentials"] + + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/Login.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/Login.razor.cs new file mode 100644 index 0000000..33b7e7d --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/Login.razor.cs @@ -0,0 +1,81 @@ +using FSH.BlazorWebAssembly.Client.Components.Common; +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using FSH.BlazorWebAssembly.Client.Infrastructure.Auth; +using FSH.BlazorWebAssembly.Client.Shared; +using FSH.WebApi.Shared.Multitenancy; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Pages.Authentication; + +public partial class Login +{ + [CascadingParameter] + public Task AuthState { get; set; } = default!; + [Inject] + public IAuthenticationService AuthService { get; set; } = default!; + + private CustomValidation? _customValidation; + + public bool BusySubmitting { get; set; } + + private readonly TokenRequest _tokenRequest = new(); + private string TenantId { get; set; } = string.Empty; + private bool _passwordVisibility; + private InputType _passwordInput = InputType.Password; + private string _passwordInputIcon = Icons.Material.Filled.VisibilityOff; + + protected override async Task OnInitializedAsync() + { + if (AuthService.ProviderType == AuthProvider.AzureAd) + { + AuthService.NavigateToExternalLogin(Navigation.Uri); + return; + } + + var authState = await AuthState; + if (authState.User.Identity?.IsAuthenticated is true) + { + Navigation.NavigateTo("/"); + } + } + + private void TogglePasswordVisibility() + { + if (_passwordVisibility) + { + _passwordVisibility = false; + _passwordInputIcon = Icons.Material.Filled.VisibilityOff; + _passwordInput = InputType.Password; + } + else + { + _passwordVisibility = true; + _passwordInputIcon = Icons.Material.Filled.Visibility; + _passwordInput = InputType.Text; + } + } + + private void FillAdministratorCredentials() + { + _tokenRequest.Email = MultitenancyConstants.Root.EmailAddress; + _tokenRequest.Password = MultitenancyConstants.DefaultPassword; + TenantId = MultitenancyConstants.Root.Id; + } + + private async Task SubmitAsync() + { + BusySubmitting = true; + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => AuthService.LoginAsync(TenantId, _tokenRequest), + Snackbar, + _customValidation)) + { + Snackbar.Add($"Logged in as {_tokenRequest.Email}", Severity.Info); + } + + BusySubmitting = false; + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/SelfRegister.razor b/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/SelfRegister.razor new file mode 100644 index 0000000..975e15e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/SelfRegister.razor @@ -0,0 +1,74 @@ +@page "/users/self-register" +@attribute [AllowAnonymous] +@inject IStringLocalizer L +@inject IStringLocalizer LS + + + + + + + + +
+ +
+
+ + @L["New User Registration"] + + @L["Enter your details below to set up your new account"] +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @L["Register"] + + +
+
\ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/SelfRegister.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/SelfRegister.razor.cs new file mode 100644 index 0000000..613b3ec --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Authentication/SelfRegister.razor.cs @@ -0,0 +1,58 @@ +using FSH.BlazorWebAssembly.Client.Components.Common; +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using FSH.BlazorWebAssembly.Client.Shared; +using FSH.WebApi.Shared.Multitenancy; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Pages.Authentication; + +public partial class SelfRegister +{ + private readonly CreateUserRequest _createUserRequest = new(); + private CustomValidation? _customValidation; + private bool BusySubmitting { get; set; } + + [Inject] + private IUsersClient UsersClient { get; set; } = default!; + + private string Tenant { get; set; } = MultitenancyConstants.Root.Id; + + private bool _passwordVisibility; + private InputType _passwordInput = InputType.Password; + private string _passwordInputIcon = Icons.Material.Filled.VisibilityOff; + + private async Task SubmitAsync() + { + BusySubmitting = true; + + string? sucessMessage = await ApiHelper.ExecuteCallGuardedAsync( + () => UsersClient.SelfRegisterAsync(Tenant, _createUserRequest), + Snackbar, + _customValidation); + + if (sucessMessage != null) + { + Snackbar.Add(sucessMessage, Severity.Info); + Navigation.NavigateTo("/login"); + } + + BusySubmitting = false; + } + + private void TogglePasswordVisibility() + { + if (_passwordVisibility) + { + _passwordVisibility = false; + _passwordInputIcon = Icons.Material.Filled.VisibilityOff; + _passwordInput = InputType.Password; + } + else + { + _passwordVisibility = true; + _passwordInputIcon = Icons.Material.Filled.Visibility; + _passwordInput = InputType.Text; + } + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Catalog/BrandAutocomplete.cs b/blazor-wasm-boilerplate-main/src/Client/Pages/Catalog/BrandAutocomplete.cs new file mode 100644 index 0000000..7720bcf --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Catalog/BrandAutocomplete.cs @@ -0,0 +1,68 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using FSH.BlazorWebAssembly.Client.Shared; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Pages.Catalog; + +public class BrandAutocomplete : MudAutocomplete +{ + [Inject] + private IStringLocalizer L { get; set; } = default!; + [Inject] + private IBrandsClient BrandsClient { get; set; } = default!; + [Inject] + private ISnackbar Snackbar { get; set; } = default!; + + private List _brands = new(); + + // supply default parameters, but leave the possibility to override them + public override Task SetParametersAsync(ParameterView parameters) + { + Label = L["Brand"]; + Variant = Variant.Filled; + Dense = true; + Margin = Margin.Dense; + ResetValueOnEmptyText = true; + SearchFunc = SearchBrands; + ToStringFunc = GetBrandName; + Clearable = true; + return base.SetParametersAsync(parameters); + } + + // when the value parameter is set, we have to load that one brand to be able to show the name + // we can't do that in OnInitialized because of a strange bug (https://github.com/MudBlazor/MudBlazor/issues/3818) + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender && + _value != default && + await ApiHelper.ExecuteCallGuardedAsync( + () => BrandsClient.GetAsync(_value), Snackbar) is { } brand) + { + _brands.Add(brand); + ForceRender(true); + } + } + + private async Task> SearchBrands(string value) + { + var filter = new SearchBrandsRequest + { + PageSize = 10, + AdvancedSearch = new() { Fields = new[] { "name" }, Keyword = value } + }; + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => BrandsClient.SearchAsync(filter), Snackbar) + is PaginationResponseOfBrandDto response) + { + _brands = response.Data.ToList(); + } + + return _brands.Select(x => x.Id); + } + + private string GetBrandName(Guid id) => + _brands.Find(b => b.Id == id)?.Name ?? string.Empty; +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Catalog/Brands.razor b/blazor-wasm-boilerplate-main/src/Client/Pages/Catalog/Brands.razor new file mode 100644 index 0000000..fe23833 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Catalog/Brands.razor @@ -0,0 +1,52 @@ +@page "/catalog/brands" +@attribute [MustHavePermission(FSHAction.View, FSHResource.Brands)] + +@inject IStringLocalizer L +@inject IBrandsClient BrandsClient + + + + + + + @if (!Context.AddEditModal.IsCreate) + { + + + + } + + + + + + + + + + +@code +{ + protected EntityServerTableContext Context { get; set; } = default!; + + protected override void OnInitialized() => + Context = new( + entityName: L["Brand"], + entityNamePlural: L["Brands"], + entityResource: FSHResource.Brands, + fields: new() + { + new(brand => brand.Id, L["Id"], "Id"), + new(brand => brand.Name, L["Name"], "Name"), + new(brand => brand.Description, L["Description"], "Description"), + }, + idFunc: brand => brand.Id, + searchFunc: async filter => (await BrandsClient + .SearchAsync(filter.Adapt())) + .Adapt>(), + createFunc: async brand => await BrandsClient.CreateAsync(brand.Adapt()), + updateFunc: async (id, brand) => await BrandsClient.UpdateAsync(id, brand), + deleteFunc: async id => await BrandsClient.DeleteAsync(id), + exportAction: string.Empty); +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Catalog/Products.razor b/blazor-wasm-boilerplate-main/src/Client/Pages/Catalog/Products.razor new file mode 100644 index 0000000..89b083e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Catalog/Products.razor @@ -0,0 +1,78 @@ +@page "/catalog/products" +@attribute [MustHavePermission(FSHAction.View, FSHResource.Products)] + +@inject IStringLocalizer L + + + + + + + + @L["Minimum Rate"]: @_searchMinimumRate.ToString() + @L["Maximum Rate"]: @_searchMaximumRate.ToString() + + + + @if (!Context.AddEditModal.IsCreate) + { + + + + } + + + + + + + + + + + + + + + @if(!string.IsNullOrEmpty(context.ImageInBytes)) + { + + } + else + { + + } + + +
+ + @L["Upload"] + + @if(!Context.AddEditModal.IsCreate && !string.IsNullOrEmpty(context.ImagePath) && string.IsNullOrEmpty(context.ImageInBytes)) + { + + @L["View"] + + + + @L["Delete"] + + } + @if(!string.IsNullOrEmpty(context.ImageInBytes)) + { + + @L["Clear"] + + } +
+
+
+
+ +
\ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Catalog/Products.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Pages/Catalog/Products.razor.cs new file mode 100644 index 0000000..079dd06 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Catalog/Products.razor.cs @@ -0,0 +1,159 @@ +using FSH.BlazorWebAssembly.Client.Components.EntityTable; +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using FSH.BlazorWebAssembly.Client.Infrastructure.Common; +using FSH.WebApi.Shared.Authorization; +using Mapster; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Forms; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Pages.Catalog; + +public partial class Products +{ + [Inject] + protected IProductsClient ProductsClient { get; set; } = default!; + [Inject] + protected IBrandsClient BrandsClient { get; set; } = default!; + + protected EntityServerTableContext Context { get; set; } = default!; + + private EntityTable _table = default!; + + protected override void OnInitialized() => + Context = new( + entityName: L["Product"], + entityNamePlural: L["Products"], + entityResource: FSHResource.Products, + fields: new() + { + new(prod => prod.Id, L["Id"], "Id"), + new(prod => prod.Name, L["Name"], "Name"), + new(prod => prod.BrandName, L["Brand"], "Brand.Name"), + new(prod => prod.Description, L["Description"], "Description"), + new(prod => prod.Rate, L["Rate"], "Rate") + }, + enableAdvancedSearch: true, + idFunc: prod => prod.Id, + searchFunc: async filter => + { + var productFilter = filter.Adapt(); + + productFilter.BrandId = SearchBrandId == default ? null : SearchBrandId; + productFilter.MinimumRate = SearchMinimumRate; + productFilter.MaximumRate = SearchMaximumRate; + + var result = await ProductsClient.SearchAsync(productFilter); + return result.Adapt>(); + }, + createFunc: async prod => + { + if (!string.IsNullOrEmpty(prod.ImageInBytes)) + { + prod.Image = new FileUploadRequest() { Data = prod.ImageInBytes, Extension = prod.ImageExtension ?? string.Empty, Name = $"{prod.Name}_{Guid.NewGuid():N}" }; + } + + await ProductsClient.CreateAsync(prod.Adapt()); + prod.ImageInBytes = string.Empty; + }, + updateFunc: async (id, prod) => + { + if (!string.IsNullOrEmpty(prod.ImageInBytes)) + { + prod.DeleteCurrentImage = true; + prod.Image = new FileUploadRequest() { Data = prod.ImageInBytes, Extension = prod.ImageExtension ?? string.Empty, Name = $"{prod.Name}_{Guid.NewGuid():N}" }; + } + + await ProductsClient.UpdateAsync(id, prod.Adapt()); + prod.ImageInBytes = string.Empty; + }, + exportFunc: async filter => + { + var exportFilter = filter.Adapt(); + + exportFilter.BrandId = SearchBrandId == default ? null : SearchBrandId; + exportFilter.MinimumRate = SearchMinimumRate; + exportFilter.MaximumRate = SearchMaximumRate; + + return await ProductsClient.ExportAsync(exportFilter); + }, + deleteFunc: async id => await ProductsClient.DeleteAsync(id)); + + // Advanced Search + + private Guid _searchBrandId; + private Guid SearchBrandId + { + get => _searchBrandId; + set + { + _searchBrandId = value; + _ = _table.ReloadDataAsync(); + } + } + + private decimal _searchMinimumRate; + private decimal SearchMinimumRate + { + get => _searchMinimumRate; + set + { + _searchMinimumRate = value; + _ = _table.ReloadDataAsync(); + } + } + + private decimal _searchMaximumRate = 9999; + private decimal SearchMaximumRate + { + get => _searchMaximumRate; + set + { + _searchMaximumRate = value; + _ = _table.ReloadDataAsync(); + } + } + + // TODO : Make this as a shared service or something? Since it's used by Profile Component also for now, and literally any other component that will have image upload. + // The new service should ideally return $"data:{ApplicationConstants.StandardImageFormat};base64,{Convert.ToBase64String(buffer)}" + private async Task UploadFiles(InputFileChangeEventArgs e) + { + if (e.File != null) + { + string? extension = Path.GetExtension(e.File.Name); + if (!ApplicationConstants.SupportedImageFormats.Contains(extension.ToLower())) + { + Snackbar.Add("Image Format Not Supported.", Severity.Error); + return; + } + + Context.AddEditModal.RequestModel.ImageExtension = extension; + var imageFile = await e.File.RequestImageFileAsync(ApplicationConstants.StandardImageFormat, ApplicationConstants.MaxImageWidth, ApplicationConstants.MaxImageHeight); + byte[]? buffer = new byte[imageFile.Size]; + await imageFile.OpenReadStream(ApplicationConstants.MaxAllowedSize).ReadAsync(buffer); + Context.AddEditModal.RequestModel.ImageInBytes = $"data:{ApplicationConstants.StandardImageFormat};base64,{Convert.ToBase64String(buffer)}"; + Context.AddEditModal.ForceRender(); + } + } + + public void ClearImageInBytes() + { + Context.AddEditModal.RequestModel.ImageInBytes = string.Empty; + Context.AddEditModal.ForceRender(); + } + + public void SetDeleteCurrentImageFlag() + { + Context.AddEditModal.RequestModel.ImageInBytes = string.Empty; + Context.AddEditModal.RequestModel.ImagePath = string.Empty; + Context.AddEditModal.RequestModel.DeleteCurrentImage = true; + Context.AddEditModal.ForceRender(); + } +} + +public class ProductViewModel : UpdateProductRequest +{ + public string? ImagePath { get; set; } + public string? ImageInBytes { get; set; } + public string? ImageExtension { get; set; } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Account/Account.razor b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Account/Account.razor new file mode 100644 index 0000000..4d89ede --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Account/Account.razor @@ -0,0 +1,33 @@ +@page "/account" + +@inject IStringLocalizer L + + + + + + + + @if (!SecurityTabHidden) + { + + + + } + + +@code +{ + [Inject] + public IAuthenticationService AuthService { get; set; } = default!; + + public bool SecurityTabHidden { get; set; } = false; + + protected override void OnInitialized() + { + if (AuthService.ProviderType == AuthProvider.AzureAd) + { + SecurityTabHidden = true; + } + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Account/Profile.razor b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Account/Profile.razor new file mode 100644 index 0000000..006b27b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Account/Profile.razor @@ -0,0 +1,84 @@ +@inject IStringLocalizer L + + + + + +
+ @if (!string.IsNullOrEmpty(_imageUrl)) + { + + } + else + { + @_firstLetterOfName + } +
+ @_profileModel.FirstName @_profileModel.LastName + @_profileModel.Email +
+ + +
+
+ + + + + + @L["Profile Details"] + + + + + + + + + + + + + + + + + + + + + + @L["Save Changes"] + + + + +
\ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Account/Profile.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Account/Profile.razor.cs new file mode 100644 index 0000000..0f78259 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Account/Profile.razor.cs @@ -0,0 +1,101 @@ +using System.Security.Claims; +using FSH.BlazorWebAssembly.Client.Components.Common; +using FSH.BlazorWebAssembly.Client.Components.Dialogs; +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using FSH.BlazorWebAssembly.Client.Infrastructure.Auth; +using FSH.BlazorWebAssembly.Client.Infrastructure.Common; +using FSH.BlazorWebAssembly.Client.Shared; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; +using Microsoft.AspNetCore.Components.Forms; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Pages.Identity.Account; + +public partial class Profile +{ + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + [Inject] + protected IAuthenticationService AuthService { get; set; } = default!; + [Inject] + protected IPersonalClient PersonalClient { get; set; } = default!; + + private readonly UpdateUserRequest _profileModel = new(); + + private string? _imageUrl; + private string? _userId; + private char _firstLetterOfName; + + private CustomValidation? _customValidation; + + protected override async Task OnInitializedAsync() + { + if ((await AuthState).User is { } user) + { + _userId = user.GetUserId(); + _profileModel.Email = user.GetEmail() ?? string.Empty; + _profileModel.FirstName = user.GetFirstName() ?? string.Empty; + _profileModel.LastName = user.GetSurname() ?? string.Empty; + _profileModel.PhoneNumber = user.GetPhoneNumber(); + _imageUrl = string.IsNullOrEmpty(user?.GetImageUrl()) ? string.Empty : (Config[ConfigNames.ApiBaseUrl] + user?.GetImageUrl()); + if (_userId is not null) _profileModel.Id = _userId; + } + + if (_profileModel.FirstName?.Length > 0) + { + _firstLetterOfName = _profileModel.FirstName.ToUpper().FirstOrDefault(); + } + } + + private async Task UpdateProfileAsync() + { + if (await ApiHelper.ExecuteCallGuardedAsync( + () => PersonalClient.UpdateProfileAsync(_profileModel), Snackbar, _customValidation)) + { + Snackbar.Add(L["Your Profile has been updated. Please Login again to Continue."], Severity.Success); + await AuthService.ReLoginAsync(Navigation.Uri); + } + } + + private async Task UploadFiles(InputFileChangeEventArgs e) + { + var file = e.File; + if (file is not null) + { + string? extension = Path.GetExtension(file.Name); + if (!ApplicationConstants.SupportedImageFormats.Contains(extension.ToLower())) + { + Snackbar.Add("Image Format Not Supported.", Severity.Error); + return; + } + + string? fileName = $"{_userId}-{Guid.NewGuid():N}"; + fileName = fileName[..Math.Min(fileName.Length, 90)]; + var imageFile = await file.RequestImageFileAsync(ApplicationConstants.StandardImageFormat, ApplicationConstants.MaxImageWidth, ApplicationConstants.MaxImageHeight); + byte[]? buffer = new byte[imageFile.Size]; + await imageFile.OpenReadStream(ApplicationConstants.MaxAllowedSize).ReadAsync(buffer); + string? base64String = $"data:{ApplicationConstants.StandardImageFormat};base64,{Convert.ToBase64String(buffer)}"; + _profileModel.Image = new FileUploadRequest() { Name = fileName, Data = base64String, Extension = extension }; + + await UpdateProfileAsync(); + } + } + + public async Task RemoveImageAsync() + { + string deleteContent = L["You're sure you want to delete your Profile Image?"]; + var parameters = new DialogParameters + { + { nameof(DeleteConfirmation.ContentText), deleteContent } + }; + var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true, DisableBackdropClick = true }; + var dialog = DialogService.Show(L["Delete"], parameters, options); + var result = await dialog.Result; + if (!result.Cancelled) + { + _profileModel.DeleteCurrentImage = true; + await UpdateProfileAsync(); + } + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Account/Security.razor b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Account/Security.razor new file mode 100644 index 0000000..c63d189 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Account/Security.razor @@ -0,0 +1,41 @@ +@inject IStringLocalizer L + + + + + + @L["Change Password"] + + + + + + + + + + + + + + + + + + + + @L["Change Password"] + + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Account/Security.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Account/Security.razor.cs new file mode 100644 index 0000000..15f2668 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Account/Security.razor.cs @@ -0,0 +1,72 @@ +using FSH.BlazorWebAssembly.Client.Components.Common; +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using FSH.BlazorWebAssembly.Client.Shared; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Pages.Identity.Account; + +public partial class Security +{ + [Inject] + public IPersonalClient PersonalClient { get; set; } = default!; + + private readonly ChangePasswordRequest _passwordModel = new(); + + private CustomValidation? _customValidation; + + private async Task ChangePasswordAsync() + { + if (await ApiHelper.ExecuteCallGuardedAsync( + () => PersonalClient.ChangePasswordAsync(_passwordModel), + Snackbar, + _customValidation, + L["Password Changed!"])) + { + _passwordModel.Password = string.Empty; + _passwordModel.NewPassword = string.Empty; + _passwordModel.ConfirmNewPassword = string.Empty; + } + } + + private bool _currentPasswordVisibility; + private InputType _currentPasswordInput = InputType.Password; + private string _currentPasswordInputIcon = Icons.Material.Filled.VisibilityOff; + private bool _newPasswordVisibility; + private InputType _newPasswordInput = InputType.Password; + private string _newPasswordInputIcon = Icons.Material.Filled.VisibilityOff; + + private void TogglePasswordVisibility(bool newPassword) + { + if (newPassword) + { + if (_newPasswordVisibility) + { + _newPasswordVisibility = false; + _newPasswordInputIcon = Icons.Material.Filled.VisibilityOff; + _newPasswordInput = InputType.Password; + } + else + { + _newPasswordVisibility = true; + _newPasswordInputIcon = Icons.Material.Filled.Visibility; + _newPasswordInput = InputType.Text; + } + } + else + { + if (_currentPasswordVisibility) + { + _currentPasswordVisibility = false; + _currentPasswordInputIcon = Icons.Material.Filled.VisibilityOff; + _currentPasswordInput = InputType.Password; + } + else + { + _currentPasswordVisibility = true; + _currentPasswordInputIcon = Icons.Material.Filled.Visibility; + _currentPasswordInput = InputType.Text; + } + } + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Roles/RolePermissions.razor b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Roles/RolePermissions.razor new file mode 100644 index 0000000..c51c397 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Roles/RolePermissions.razor @@ -0,0 +1,75 @@ +@page "/roles/{Id}/permissions" +@attribute [MustHavePermission(FSHAction.View, FSHResource.RoleClaims)] + +@inject IStringLocalizer L + + + +@if (!_loaded) +{ + +} +else +{ + + @foreach (var group in _groupedRoleClaims.Keys) + { + var selectedRoleClaimsInGroup = _groupedRoleClaims[group].Where(c => c.Enabled).ToList(); + var allRoleClaimsInGroup = _groupedRoleClaims[group].ToList(); + + + +
+ @L["Back"] + + @if (_canEditRoleClaims) + { + @L["Update Permissions"] + + } +
+ + @if (_canSearchRoleClaims) + { + + + } +
+ + + + @L["Permission Name"] + + + + @L["Description"] + + + @L["Status"] + + + + + + + + + + + + + + + + + + +
+
+ } +
+} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Roles/RolePermissions.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Roles/RolePermissions.razor.cs new file mode 100644 index 0000000..6371dd9 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Roles/RolePermissions.razor.cs @@ -0,0 +1,114 @@ +using System.Security.Claims; +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using FSH.BlazorWebAssembly.Client.Infrastructure.Auth; +using FSH.BlazorWebAssembly.Client.Shared; +using FSH.WebApi.Shared.Authorization; +using FSH.WebApi.Shared.Multitenancy; +using Mapster; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Pages.Identity.Roles; + +public partial class RolePermissions +{ + [Parameter] + public string Id { get; set; } = default!; // from route + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + [Inject] + protected IAuthorizationService AuthService { get; set; } = default!; + [Inject] + protected IRolesClient RolesClient { get; set; } = default!; + + private Dictionary> _groupedRoleClaims = default!; + + public string _title = string.Empty; + public string _description = string.Empty; + + private string _searchString = string.Empty; + + private bool _canEditRoleClaims; + private bool _canSearchRoleClaims; + private bool _loaded; + + static RolePermissions() => TypeAdapterConfig.NewConfig().MapToConstructor(true); + + protected override async Task OnInitializedAsync() + { + var state = await AuthState; + _canEditRoleClaims = await AuthService.HasPermissionAsync(state.User, FSHAction.Update, FSHResource.RoleClaims); + _canSearchRoleClaims = await AuthService.HasPermissionAsync(state.User, FSHAction.View, FSHResource.RoleClaims); + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => RolesClient.GetByIdWithPermissionsAsync(Id), Snackbar) + is RoleDto role && role.Permissions is not null) + { + _title = string.Format(L["{0} Permissions"], role.Name); + _description = string.Format(L["Manage {0} Role Permissions"], role.Name); + + var permissions = state.User.GetTenant() == MultitenancyConstants.Root.Id + ? FSHPermissions.All + : FSHPermissions.Admin; + + _groupedRoleClaims = permissions + .GroupBy(p => p.Resource) + .ToDictionary(g => g.Key, g => g.Select(p => + { + var permission = p.Adapt(); + permission.Enabled = role.Permissions.Contains(permission.Name); + return permission; + }).ToList()); + } + + _loaded = true; + } + + private Color GetGroupBadgeColor(int selected, int all) + { + if (selected == 0) + return Color.Error; + + if (selected == all) + return Color.Success; + + return Color.Info; + } + + private async Task SaveAsync() + { + var allPermissions = _groupedRoleClaims.Values.SelectMany(a => a); + var selectedPermissions = allPermissions.Where(a => a.Enabled); + var request = new UpdateRolePermissionsRequest() + { + RoleId = Id, + Permissions = selectedPermissions.Where(x => x.Enabled).Select(x => x.Name).ToList(), + }; + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => RolesClient.UpdatePermissionsAsync(request.RoleId, request), + Snackbar, + successMessage: L["Updated Permissions."]) + is not null) + { + Navigation.NavigateTo("/roles"); + } + } + + private bool Search(PermissionViewModel permission) => + string.IsNullOrWhiteSpace(_searchString) + || permission.Name.Contains(_searchString, StringComparison.OrdinalIgnoreCase) is true + || permission.Description.Contains(_searchString, StringComparison.OrdinalIgnoreCase) is true; +} + +public record PermissionViewModel : FSHPermission +{ + public bool Enabled { get; set; } + + public PermissionViewModel(string Description, string Action, string Resource, bool IsBasic = false, bool IsRoot = false) + : base(Description, Action, Resource, IsBasic, IsRoot) + { + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Roles/Roles.razor b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Roles/Roles.razor new file mode 100644 index 0000000..c24582a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Roles/Roles.razor @@ -0,0 +1,33 @@ +@page "/roles" +@attribute [MustHavePermission(FSHAction.View, FSHResource.Roles)] + +@inject IStringLocalizer L + + + + + + + @if (_canViewRoleClaims) + { + @L["Manage Permission"] + } + + + + @if (!Context.AddEditModal.IsCreate) + { + + + + } + + + + + + + + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Roles/Roles.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Roles/Roles.razor.cs new file mode 100644 index 0000000..0ee166f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Roles/Roles.razor.cs @@ -0,0 +1,60 @@ +using FSH.BlazorWebAssembly.Client.Components.EntityTable; +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using FSH.BlazorWebAssembly.Client.Infrastructure.Auth; +using FSH.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; + +namespace FSH.BlazorWebAssembly.Client.Pages.Identity.Roles; + +public partial class Roles +{ + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + [Inject] + protected IAuthorizationService AuthService { get; set; } = default!; + [Inject] + private IRolesClient RolesClient { get; set; } = default!; + + protected EntityClientTableContext Context { get; set; } = default!; + + private bool _canViewRoleClaims; + + protected override async Task OnInitializedAsync() + { + var state = await AuthState; + _canViewRoleClaims = await AuthService.HasPermissionAsync(state.User, FSHAction.View, FSHResource.RoleClaims); + + Context = new( + entityName: L["Role"], + entityNamePlural: L["Roles"], + entityResource: FSHResource.Roles, + searchAction: FSHAction.View, + fields: new() + { + new(role => role.Id, L["Id"]), + new(role => role.Name, L["Name"]), + new(role => role.Description, L["Description"]) + }, + idFunc: role => role.Id, + loadDataFunc: async () => (await RolesClient.GetListAsync()).ToList(), + searchFunc: (searchString, role) => + string.IsNullOrWhiteSpace(searchString) + || role.Name?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true + || role.Description?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true, + createFunc: async role => await RolesClient.RegisterRoleAsync(role), + updateFunc: async (_, role) => await RolesClient.RegisterRoleAsync(role), + deleteFunc: async id => await RolesClient.DeleteAsync(id), + hasExtraActionsFunc: () => _canViewRoleClaims, + canUpdateEntityFunc: e => !FSHRoles.IsDefault(e.Name), + canDeleteEntityFunc: e => !FSHRoles.IsDefault(e.Name), + exportAction: string.Empty); + } + + private void ManagePermissions(string? roleId) + { + ArgumentNullException.ThrowIfNull(roleId, nameof(roleId)); + Navigation.NavigateTo($"/roles/{roleId}/permissions"); + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Users/UserProfile.razor b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Users/UserProfile.razor new file mode 100644 index 0000000..5eeaddf --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Users/UserProfile.razor @@ -0,0 +1,148 @@ +@page "/users/{Id}/profile" +@attribute [MustHavePermission(FSHAction.View, FSHResource.Users)] + +@inject IStringLocalizer _localizer + + +@if (!_loaded) +{ + +} +else +{ + + + @if (_canToggleUserStatus) + { + + + + + @_localizer["Administrator Settings."] + @_localizer["This is an Administrator Only View."] + + + + + + + + @_localizer["Save Changes"] + + + + + + } + + + + +
+ @if (!string.IsNullOrEmpty(_imageUrl)) + { + + } + else + { + @_firstLetterOfName + + } +
+ @_firstName @_lastName + @_email +
+ +
+ @if (!string.IsNullOrEmpty(_imageUrl)) + { + + @_localizer["View"] + + } +
+ +
+
+
+ + + + + @_localizer["Public Profile"] + + + + + + @_firstName + + + @_lastName + + + @_phoneNumber + + + + @_email + + + + + +
+} + +@code +{ +public class CustomStringToBoolConverter : BoolConverter + { + + public CustomStringToBoolConverter() + { + SetFunc = OnSet; + GetFunc = OnGet; + } + private string TrueString = "User Active"; + private string FalseString = "no, at all"; + private string NullString = "I don't know"; + + private string OnGet(bool? value) + { + try + { + return (value == true) ? TrueString : FalseString; + } + catch (Exception e) + { + UpdateGetError("Conversion error: " + e.Message); + return NullString; + } + } + + private bool? OnSet(string arg) + { + if (arg == null) + return null; + try + { + if (arg == TrueString) + return true; + if (arg == FalseString) + return false; + else + return null; + } + catch (FormatException e) + { + UpdateSetError("Conversion error: " + e.Message); + return null; + } + } + + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Users/UserProfile.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Users/UserProfile.razor.cs new file mode 100644 index 0000000..04511d3 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Users/UserProfile.razor.cs @@ -0,0 +1,74 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using FSH.BlazorWebAssembly.Client.Infrastructure.Auth; +using FSH.BlazorWebAssembly.Client.Infrastructure.Common; +using FSH.BlazorWebAssembly.Client.Shared; +using FSH.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; + +namespace FSH.BlazorWebAssembly.Client.Pages.Identity.Users; + +public partial class UserProfile +{ + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + [Inject] + protected IAuthorizationService AuthService { get; set; } = default!; + [Inject] + protected IUsersClient UsersClient { get; set; } = default!; + + [Parameter] + public string? Id { get; set; } + [Parameter] + public string? Title { get; set; } + [Parameter] + public string? Description { get; set; } + + private bool _active; + private bool _emailConfirmed; + private char _firstLetterOfName; + private string? _firstName; + private string? _lastName; + private string? _phoneNumber; + private string? _email; + private string? _imageUrl; + private bool _loaded; + private bool _canToggleUserStatus; + + private async Task ToggleUserStatus() + { + var request = new ToggleUserStatusRequest { ActivateUser = _active, UserId = Id }; + await ApiHelper.ExecuteCallGuardedAsync(() => UsersClient.ToggleStatusAsync(Id, request), Snackbar); + Navigation.NavigateTo("/users"); + } + + [Parameter] + public string? ImageUrl { get; set; } + + protected override async Task OnInitializedAsync() + { + if (await ApiHelper.ExecuteCallGuardedAsync( + () => UsersClient.GetByIdAsync(Id), Snackbar) + is UserDetailsDto user) + { + _firstName = user.FirstName; + _lastName = user.LastName; + _email = user.Email; + _phoneNumber = user.PhoneNumber; + _active = user.IsActive; + _emailConfirmed = user.EmailConfirmed; + _imageUrl = string.IsNullOrEmpty(user.ImageUrl) ? string.Empty : (Config[ConfigNames.ApiBaseUrl] + user.ImageUrl); + Title = $"{_firstName} {_lastName}'s {_localizer["Profile"]}"; + Description = _email; + if (_firstName?.Length > 0) + { + _firstLetterOfName = _firstName.ToUpper().FirstOrDefault(); + } + } + + var state = await AuthState; + _canToggleUserStatus = await AuthService.HasPermissionAsync(state.User, FSHAction.Update, FSHResource.Users); + _loaded = true; + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Users/UserRoles.razor b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Users/UserRoles.razor new file mode 100644 index 0000000..bc82479 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Users/UserRoles.razor @@ -0,0 +1,67 @@ +@page "/users/{Id}/roles" +@attribute [MustHavePermission(FSHAction.View, FSHResource.UserRoles)] + +@inject IStringLocalizer L + + + +@if (!_loaded) +{ + +} +else +{ + + +
+ + @L["Back"] + + @if (_canEditUsers) + { + + @L["Update"] + + } +
+ + @if (_canSearchRoles) + { + + + } +
+ + + @L["Role Name"] + + + + @L["Description"] + + + + @L["Status"] + + + + + + + + + + + + + + + + + + +
+} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Users/UserRoles.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Users/UserRoles.razor.cs new file mode 100644 index 0000000..1b0664b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Users/UserRoles.razor.cs @@ -0,0 +1,77 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using FSH.BlazorWebAssembly.Client.Infrastructure.Auth; +using FSH.BlazorWebAssembly.Client.Shared; +using FSH.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; + +namespace FSH.BlazorWebAssembly.Client.Pages.Identity.Users; + +public partial class UserRoles +{ + [Parameter] + public string? Id { get; set; } + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + [Inject] + protected IAuthorizationService AuthService { get; set; } = default!; + [Inject] + protected IUsersClient UsersClient { get; set; } = default!; + + private List _userRolesList = default!; + + private string _title = string.Empty; + private string _description = string.Empty; + + private string _searchString = string.Empty; + + private bool _canEditUsers; + private bool _canSearchRoles; + private bool _loaded; + + protected override async Task OnInitializedAsync() + { + var state = await AuthState; + _canEditUsers = await AuthService.HasPermissionAsync(state.User, FSHAction.Update, FSHResource.Users); + _canSearchRoles = await AuthService.HasPermissionAsync(state.User, FSHAction.View, FSHResource.UserRoles); + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => UsersClient.GetByIdAsync(Id), Snackbar) + is UserDetailsDto user) + { + _title = $"{user.FirstName} {user.LastName}"; + _description = string.Format(L["Manage {0} {1}'s Roles"], user.FirstName, user.LastName); + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => UsersClient.GetRolesAsync(user.Id.ToString()), Snackbar) + is ICollection response) + { + _userRolesList = response.ToList(); + } + } + + _loaded = true; + } + + private async Task SaveAsync() + { + var request = new UserRolesRequest() + { + UserRoles = _userRolesList + }; + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => UsersClient.AssignRolesAsync(Id, request), + Snackbar, + successMessage: L["Updated User Roles."]) + is not null) + { + Navigation.NavigateTo("/users"); + } + } + + private bool Search(UserRoleDto userRole) => + string.IsNullOrWhiteSpace(_searchString) + || userRole.RoleName?.Contains(_searchString, StringComparison.OrdinalIgnoreCase) is true; +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Users/Users.razor b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Users/Users.razor new file mode 100644 index 0000000..f2d93ec --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Users/Users.razor @@ -0,0 +1,46 @@ +@page "/users" +@attribute [MustHavePermission(FSHAction.View, FSHResource.Users)] + +@inject IStringLocalizer L + + + + + + @L["View Profile"] + @if (_canViewRoles) + { + @L["Manage Roles"] + } + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Users/Users.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Users/Users.razor.cs new file mode 100644 index 0000000..c041739 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Identity/Users/Users.razor.cs @@ -0,0 +1,95 @@ +using FSH.BlazorWebAssembly.Client.Components.EntityTable; +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using FSH.BlazorWebAssembly.Client.Infrastructure.Auth; +using FSH.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Pages.Identity.Users; + +public partial class Users +{ + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + [Inject] + protected IAuthorizationService AuthService { get; set; } = default!; + + [Inject] + protected IUsersClient UsersClient { get; set; } = default!; + + protected EntityClientTableContext Context { get; set; } = default!; + + private bool _canExportUsers; + private bool _canViewRoles; + + // Fields for editform + protected string Password { get; set; } = string.Empty; + protected string ConfirmPassword { get; set; } = string.Empty; + + private bool _passwordVisibility; + private InputType _passwordInput = InputType.Password; + private string _passwordInputIcon = Icons.Material.Filled.VisibilityOff; + + protected override async Task OnInitializedAsync() + { + var user = (await AuthState).User; + _canExportUsers = await AuthService.HasPermissionAsync(user, FSHAction.Export, FSHResource.Users); + _canViewRoles = await AuthService.HasPermissionAsync(user, FSHAction.View, FSHResource.UserRoles); + + Context = new( + entityName: L["User"], + entityNamePlural: L["Users"], + entityResource: FSHResource.Users, + searchAction: FSHAction.View, + updateAction: string.Empty, + deleteAction: string.Empty, + fields: new() + { + new(user => user.FirstName, L["First Name"]), + new(user => user.LastName, L["Last Name"]), + new(user => user.UserName, L["UserName"]), + new(user => user.Email, L["Email"]), + new(user => user.PhoneNumber, L["PhoneNumber"]), + new(user => user.EmailConfirmed, L["Email Confirmation"], Type: typeof(bool)), + new(user => user.IsActive, L["Active"], Type: typeof(bool)) + }, + idFunc: user => user.Id, + loadDataFunc: async () => (await UsersClient.GetListAsync()).ToList(), + searchFunc: (searchString, user) => + string.IsNullOrWhiteSpace(searchString) + || user.FirstName?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true + || user.LastName?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true + || user.Email?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true + || user.PhoneNumber?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true + || user.UserName?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true, + createFunc: user => UsersClient.CreateAsync(user), + hasExtraActionsFunc: () => true, + exportAction: string.Empty); + } + + private void ViewProfile(in Guid userId) => + Navigation.NavigateTo($"/users/{userId}/profile"); + + private void ManageRoles(in Guid userId) => + Navigation.NavigateTo($"/users/{userId}/roles"); + + private void TogglePasswordVisibility() + { + if (_passwordVisibility) + { + _passwordVisibility = false; + _passwordInputIcon = Icons.Material.Filled.VisibilityOff; + _passwordInput = InputType.Password; + } + else + { + _passwordVisibility = true; + _passwordInputIcon = Icons.Material.Filled.Visibility; + _passwordInput = InputType.Text; + } + + Context.AddEditModal.ForceRender(); + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Index.razor b/blazor-wasm-boilerplate-main/src/Client/Pages/Index.razor new file mode 100644 index 0000000..42798ac --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Index.razor @@ -0,0 +1,95 @@ +@page "/home" +@page "/" + +@inject IStringLocalizer L + + + + +
+ +
+
+ + @L["fullstackhero's"] + @L["Blazor WebAssembly Boilerplate"] + + + + + @L["Built with the goodness of"] MudBlazor @L["Component Library"]. + + + @L["Compatible with"] fullstackhero .NET WebAPI Boilerplate v1. + + + +
+ @L["Get Started"] + @L["Star on GitHub"] +
+
+ + @L["Version 1.0"] + + + + + @L["In case you are stuck anywhere or have any queries regarding this implementation, I have compiled a Quick Start Guide for you reference."] + @L["Read The Guide"] + + + + + + + + + @L["Here are few articles that should help you get started with Blazor."] + + + + + + + + + + + + @L["Application Claims of the currently logged in user."] + + @if (Claims is not null) + { + @foreach (var claim in Claims) + { + + + @claim.Type + + @claim.Value + + } + } + + + + + + @L["Liked this Boilerplate? Star us on Github!"] + +
+
+ +@code { + [CascadingParameter] + public Task AuthState { get; set; } = default!; + + public IEnumerable? Claims { get; set; } + + protected override async Task OnInitializedAsync() + { + var authState = await AuthState; + Claims = authState.User.Claims; + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Multitenancy/Tenants.razor b/blazor-wasm-boilerplate-main/src/Client/Pages/Multitenancy/Tenants.razor new file mode 100644 index 0000000..3f3da22 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Multitenancy/Tenants.razor @@ -0,0 +1,107 @@ +@page "/tenants" +@attribute [MustHavePermission(FSHAction.View, FSHResource.Tenants)] + +@inject IStringLocalizer L +@inject IAuthenticationService Authentication + + + + + + + + + + + + + + + + + + @if (Authentication.ProviderType == AuthProvider.AzureAd) + { + + + + } + + + @if(_canUpgrade) + { + @L["Upgrade Subscription"] + } + + @((context.ShowDetails == true) ? L["Hide"] : L["Show"]) @L["Tenant Details"] + + @if (_canModify) + { + @if (!context.IsActive) + { + @L["Activate Tenant"] + } + else + { + @L["Deactivate Tenant"] + } + } + + + + @if (context.ShowDetails) + { + + + + + + @L["Details for Tenant"] : + @context.Id + + + + + + + + @if(string.IsNullOrEmpty(context.ConnectionString?.Trim())) + { + @L["Shared Database"] + } + else + { + + + } + + @if (Authentication.ProviderType == AuthProvider.AzureAd) + { + + + + + } + +
@L["Connection String"] + + @context.ConnectionString?.Trim() + +
@L["Issuer"] + + + @context.Issuer?.Trim() + + +
+
+
+ +
+ } +
+ +
\ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Multitenancy/Tenants.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Pages/Multitenancy/Tenants.razor.cs new file mode 100644 index 0000000..d18eb13 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Multitenancy/Tenants.razor.cs @@ -0,0 +1,121 @@ +using FSH.BlazorWebAssembly.Client.Components.EntityTable; +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using FSH.BlazorWebAssembly.Client.Infrastructure.Auth; +using FSH.BlazorWebAssembly.Client.Shared; +using FSH.WebApi.Shared.Authorization; +using Mapster; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Pages.Multitenancy; + +public partial class Tenants +{ + [Inject] + private ITenantsClient TenantsClient { get; set; } = default!; + private string? _searchString; + protected EntityClientTableContext Context { get; set; } = default!; + private List _tenants = new(); + public EntityTable EntityTable { get; set; } = default!; + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + [Inject] + protected IAuthorizationService AuthService { get; set; } = default!; + + private bool _canUpgrade; + private bool _canModify; + + protected override async Task OnInitializedAsync() + { + Context = new( + entityName: L["Tenant"], + entityNamePlural: L["Tenants"], + entityResource: FSHResource.Tenants, + searchAction: FSHAction.View, + deleteAction: string.Empty, + updateAction: string.Empty, + fields: new() + { + new(tenant => tenant.Id, L["Id"]), + new(tenant => tenant.Name, L["Name"]), + new(tenant => tenant.AdminEmail, L["Admin Email"]), + new(tenant => tenant.ValidUpto.ToString("MMM dd, yyyy"), L["Valid Upto"]), + new(tenant => tenant.IsActive, L["Active"], Type: typeof(bool)) + }, + loadDataFunc: async () => _tenants = (await TenantsClient.GetListAsync()).Adapt>(), + searchFunc: (searchString, tenantDto) => + string.IsNullOrWhiteSpace(searchString) + || tenantDto.Name.Contains(searchString, StringComparison.OrdinalIgnoreCase), + createFunc: tenant => TenantsClient.CreateAsync(tenant.Adapt()), + hasExtraActionsFunc: () => true, + exportAction: string.Empty); + + var state = await AuthState; + _canUpgrade = await AuthService.HasPermissionAsync(state.User, FSHAction.UpgradeSubscription, FSHResource.Tenants); + _canModify = await AuthService.HasPermissionAsync(state.User, FSHAction.Update, FSHResource.Tenants); + } + + private void ViewTenantDetails(string id) + { + var tenant = _tenants.First(f => f.Id == id); + tenant.ShowDetails = !tenant.ShowDetails; + foreach (var otherTenants in _tenants.Except(new[] { tenant })) + { + otherTenants.ShowDetails = false; + } + } + + private async Task ViewUpgradeSubscriptionModalAsync(string id) + { + var tenant = _tenants.First(f => f.Id == id); + var parameters = new DialogParameters + { + { + nameof(UpgradeSubscriptionModal.Request), + new UpgradeSubscriptionRequest + { + TenantId = tenant.Id, + ExtendedExpiryDate = tenant.ValidUpto + } + } + }; + var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true, DisableBackdropClick = true }; + var dialog = DialogService.Show(L["Upgrade Subscription"], parameters, options); + var result = await dialog.Result; + if (!result.Cancelled) + { + await EntityTable.ReloadDataAsync(); + } + } + + private async Task DeactivateTenantAsync(string id) + { + if (await ApiHelper.ExecuteCallGuardedAsync( + () => TenantsClient.DeactivateAsync(id), + Snackbar, + null, + L["Tenant Deactivated."]) is not null) + { + await EntityTable.ReloadDataAsync(); + } + } + + private async Task ActivateTenantAsync(string id) + { + if (await ApiHelper.ExecuteCallGuardedAsync( + () => TenantsClient.ActivateAsync(id), + Snackbar, + null, + L["Tenant Activated."]) is not null) + { + await EntityTable.ReloadDataAsync(); + } + } + + public class TenantDetail : TenantDto + { + public bool ShowDetails { get; set; } + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Multitenancy/UpgradeSubscriptionModal.razor b/blazor-wasm-boilerplate-main/src/Client/Pages/Multitenancy/UpgradeSubscriptionModal.razor new file mode 100644 index 0000000..48921de --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Multitenancy/UpgradeSubscriptionModal.razor @@ -0,0 +1,58 @@ +@inject IStringLocalizer L +@inject ITenantsClient TenantsClient + + + + + + + @L["Upgrade Subscription"] + + + + + + + + + + + + + + + + + @L["Cancel"] + @L["Upgrade"] + + + + +@code +{ + [Parameter] public UpgradeSubscriptionRequest Request { get; set; } = new(); + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; + DateTime? date = DateTime.Today; + + protected override void OnInitialized() => + date = Request.ExtendedExpiryDate; + + private async Task UpgradeSubscriptionAsync() + { + Request.ExtendedExpiryDate = date.HasValue ? date.Value : Request.ExtendedExpiryDate; + if (await ApiHelper.ExecuteCallGuardedAsync( + () => TenantsClient.UpgradeSubscriptionAsync(Request.TenantId, Request), + Snackbar, + null, + L["Upgraded Subscription."]) is not null) + { + MudDialog.Close(); + } + } + + public void Cancel() + { + MudDialog.Cancel(); + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Personal/AuditLogs.razor b/blazor-wasm-boilerplate-main/src/Client/Pages/Personal/AuditLogs.razor new file mode 100644 index 0000000..d10503a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Personal/AuditLogs.razor @@ -0,0 +1,131 @@ +@page "/audit-logs" + +@inject IStringLocalizer L + + + + + + + @L["Search in Old Values"] + @L["Search in New Values"] + + + @L["Clear"] + @L["Cancel"] + @L["Ok"] + + + + + + @((context.ShowDetails == true) ? L["Hide"] : L["Show"]) @L["Trail Details"] + + + + @if (context.ShowDetails) + { + + + + + + @L["Details for Trail ID"] : @context.Id + + + + + + @if (!string.IsNullOrEmpty(context.AffectedColumns)) + { + + + + + } + + + + + @if (!string.IsNullOrEmpty(context.OldValues)) + { + + + + + } + @if (!string.IsNullOrEmpty(context.NewValues)) + { + + + + + } + +
@L["Columns Affected"] + + @foreach (var column in context.AffectedColumns.Trim('[').Trim(']').Split(',')) + { + @column.Replace('"', ' ').Trim() + } + +
@L["Primary Key"] + + @context.PrimaryKey?.Trim('{').Trim('}').Replace('"', ' ').Trim() + +
@L["Old Values"] + + + @foreach (var value in context.OldValues.Trim('{').Trim('}').Split(',')) + { + @if (_searchInOldValues) + { + + + + } + else + { + @value.Replace('"', ' ').Trim() + } + } + +
@L["New Values"] + + + @foreach (var value in context.NewValues.Trim('{').Trim('}').Split(',')) + { + @if (_searchInNewValues) + { + + + + } + else + { + @value.Replace('"', ' ').Trim() + } + } + +
+
+
+ +
+ } +
+ +
+ +@code { + private RenderFragment DateFieldTemplate => trail => __builder => + { + + @L["Local"] : @trail.LocalTime.ToString("G") + + + @L["UTC"] : @trail.DateTime.ToString("G") + + }; +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Personal/AuditLogs.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Pages/Personal/AuditLogs.razor.cs new file mode 100644 index 0000000..3f6460c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Personal/AuditLogs.razor.cs @@ -0,0 +1,71 @@ +using FSH.BlazorWebAssembly.Client.Components.EntityTable; +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using Mapster; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Pages.Personal; + +public partial class AuditLogs +{ + [Inject] + private IPersonalClient PersonalClient { get; set; } = default!; + + protected EntityClientTableContext Context { get; set; } = default!; + + private string? _searchString; + private MudDateRangePicker _dateRangePicker = default!; + private DateRange? _dateRange; + private bool _searchInOldValues; + private bool _searchInNewValues; + private List _trails = new(); + + // Configure Automapper + static AuditLogs() => + TypeAdapterConfig.NewConfig().Map( + dest => dest.LocalTime, + src => DateTime.SpecifyKind(src.DateTime, DateTimeKind.Utc).ToLocalTime()); + + protected override void OnInitialized() + { + Context = new( + entityNamePlural: L["Trails"], + searchAction: true.ToString(), + fields: new() + { + new(audit => audit.Id, L["Id"]), + new(audit => audit.TableName, L["Table Name"]), + new(audit => audit.DateTime, L["Date"], Template: DateFieldTemplate), + new(audit => audit.Type, L["Type"]) + }, + loadDataFunc: async () => _trails = (await PersonalClient.GetLogsAsync()).Adapt>(), + searchFunc: (searchString, trail) => + (string.IsNullOrWhiteSpace(searchString) // check Search String + || trail.TableName?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true + || (_searchInOldValues && + trail.OldValues?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true) + || (_searchInNewValues && + trail.NewValues?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true)) + && ((_dateRange?.Start is null && _dateRange?.End is null) // check Date Range + || (_dateRange?.Start is not null && _dateRange.End is null && trail.DateTime >= _dateRange.Start) + || (_dateRange?.Start is null && _dateRange?.End is not null && trail.DateTime <= _dateRange.End + new TimeSpan(0, 11, 59, 59, 999)) + || (trail.DateTime >= _dateRange!.Start && trail.DateTime <= _dateRange.End + new TimeSpan(0, 11, 59, 59, 999))), + hasExtraActionsFunc: () => true); + } + + private void ShowBtnPress(Guid id) + { + var trail = _trails.First(f => f.Id == id); + trail.ShowDetails = !trail.ShowDetails; + foreach (var otherTrail in _trails.Except(new[] { trail })) + { + otherTrail.ShowDetails = false; + } + } + + public class RelatedAuditTrail : AuditDto + { + public bool ShowDetails { get; set; } + public DateTime LocalTime { get; set; } + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Personal/Dashboard.razor b/blazor-wasm-boilerplate-main/src/Client/Pages/Personal/Dashboard.razor new file mode 100644 index 0000000..5e2fd94 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Personal/Dashboard.razor @@ -0,0 +1,65 @@ +@page "/dashboard" +@attribute [MustHavePermission(FSHAction.View, FSHResource.Dashboard)] + +@inject IStringLocalizer L + + + +@if (!_loaded) +{ + +} +else +{ + + + + +
+ @L["Products"] + @ProductCount +
+
+
+ + + +
+ @L["Brands"] + @BrandCount +
+
+
+ + + +
+ @L["Registered Users"] + + @UserCount +
+
+
+ + + +
+ @L["Registered Roles"] + + @RoleCount +
+
+
+ + + + + +
+} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Pages/Personal/Dashboard.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Pages/Personal/Dashboard.razor.cs new file mode 100644 index 0000000..4fcadd5 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Pages/Personal/Dashboard.razor.cs @@ -0,0 +1,62 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using FSH.BlazorWebAssembly.Client.Infrastructure.Notifications; +using FSH.BlazorWebAssembly.Client.Shared; +using FSH.WebApi.Shared.Notifications; +using MediatR.Courier; +using Microsoft.AspNetCore.Components; + +namespace FSH.BlazorWebAssembly.Client.Pages.Personal; + +public partial class Dashboard +{ + [Parameter] + public int ProductCount { get; set; } + [Parameter] + public int BrandCount { get; set; } + [Parameter] + public int UserCount { get; set; } + [Parameter] + public int RoleCount { get; set; } + + [Inject] + private IDashboardClient DashboardClient { get; set; } = default!; + [Inject] + private ICourier Courier { get; set; } = default!; + + private readonly string[] _dataEnterBarChartXAxisLabels = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; + private readonly List _dataEnterBarChartSeries = new(); + private bool _loaded; + + protected override async Task OnInitializedAsync() + { + Courier.SubscribeWeak>(async _ => + { + await LoadDataAsync(); + StateHasChanged(); + }); + + await LoadDataAsync(); + + _loaded = true; + } + + private async Task LoadDataAsync() + { + if (await ApiHelper.ExecuteCallGuardedAsync( + () => DashboardClient.GetAsync(), + Snackbar) + is StatsDto statsDto) + { + ProductCount = statsDto.ProductCount; + BrandCount = statsDto.BrandCount; + UserCount = statsDto.UserCount; + RoleCount = statsDto.RoleCount; + foreach (var item in statsDto.DataEnterBarChart) + { + _dataEnterBarChartSeries + .RemoveAll(x => x.Name.Equals(item.Name, StringComparison.OrdinalIgnoreCase)); + _dataEnterBarChartSeries.Add(new MudBlazor.ChartSeries { Name = item.Name, Data = item.Data?.ToArray() }); + } + } + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Program.cs b/blazor-wasm-boilerplate-main/src/Client/Program.cs new file mode 100644 index 0000000..ebd6774 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Program.cs @@ -0,0 +1,30 @@ +using System.Globalization; +using FSH.BlazorWebAssembly.Client; +using FSH.BlazorWebAssembly.Client.Infrastructure; +using FSH.BlazorWebAssembly.Client.Infrastructure.Common; +using FSH.BlazorWebAssembly.Client.Infrastructure.Preferences; +using Microsoft.AspNetCore.Components.Web; +using Microsoft.AspNetCore.Components.WebAssembly.Hosting; + +var builder = WebAssemblyHostBuilder.CreateDefault(args); + +builder.RootComponents.Add("#app"); +builder.RootComponents.Add("head::after"); + +builder.Services.AddClientServices(builder.Configuration); + +var host = builder.Build(); + +var storageService = host.Services.GetRequiredService(); +if (storageService != null) +{ + CultureInfo culture; + if (await storageService.GetPreference() is ClientPreference preference) + culture = new CultureInfo(preference.LanguageCode); + else + culture = new CultureInfo(LocalizationConstants.SupportedLanguages.FirstOrDefault()?.Code ?? "en-US"); + CultureInfo.DefaultThreadCurrentCulture = culture; + CultureInfo.DefaultThreadCurrentUICulture = culture; +} + +await host.RunAsync(); \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Properties/launchSettings.json b/blazor-wasm-boilerplate-main/src/Client/Properties/launchSettings.json new file mode 100644 index 0000000..ec01420 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Properties/launchSettings.json @@ -0,0 +1,30 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:21716", + "sslPort": 44331 + } + }, + "profiles": { + "FSH.BlazorWebAssembly": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "https://localhost:5002;http://localhost:5003", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.ar.resx new file mode 100644 index 0000000..61567a8 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.ar.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} من {all_items} + + + صف لكل صفحة + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.de.resx new file mode 100644 index 0000000..bce5fdf --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.de.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} von {all_items} + + + Zeilen je Seite: + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.en.resx new file mode 100644 index 0000000..eef54b7 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.en.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} of {all_items} + + + Rows per page: + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.es.resx new file mode 100644 index 0000000..9971ad9 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.es.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} de {all_items} + + + Registros por página: + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.fr.resx new file mode 100644 index 0000000..4ed5249 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.fr.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} sur {all_items} + + + Lignes par page : + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.id.resx new file mode 100644 index 0000000..b45e839 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.id.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} dari {all_items} + + + Baris per halaman: + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.it.resx new file mode 100644 index 0000000..338aa89 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.it.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} di {all_items} + + + Righe per pagina: + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.km.resx new file mode 100644 index 0000000..ba27d45 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.km.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} នៃ {all_items} + + + ជួរដេកក្នុងមួយទំព័រ៖ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.nl.resx new file mode 100644 index 0000000..bac82ce --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.nl.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} of {all_items} + + + Rijen per pagina: + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.ru.resx new file mode 100644 index 0000000..7a5d02c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.ru.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} из {all_items} + + + Строк на странице: + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.sv.resx new file mode 100644 index 0000000..d28249a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Components/Common/TablePager.sv.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} of {all_items} + + + Rader per sida: + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.ar.resx new file mode 100644 index 0000000..bc64cb0 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.ar.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + هل لديك حساب؟ + + + بريد الالكتروني + + + أوافق على الشروط والخصوصية + + + كلمه السر + + + رقم الهاتف + + + اشتراك + + + تسجيل الدخول + + + اشتراك + + + اسم المستخدم + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.de.resx new file mode 100644 index 0000000..59166f3 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.de.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bereits registriert? + + + E-Mail + + + Ich stimme den Nutzungs- und Datenschutzbedingungen zu. + + + Passwort + + + Telefon + + + Registrieren + + + Anmelden + + + Registrieren + + + Benutzername + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.en.resx new file mode 100644 index 0000000..d8c326d --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.en.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Already have an account? + + + E-mail + + + I agree to the terms and privacy + + + Password + + + Phone Number + + + Register + + + Sign In + + + Sign Up + + + Username + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.es.resx new file mode 100644 index 0000000..8ff1bdf --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.es.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ¿Ya tiene una cuenta? + + + Correo + + + Acepto los términos y condiciones + + + Contraseña + + + Teléfono + + + Registrarse + + + Ingresar + + + Registrarse + + + Usuario + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.fr.resx new file mode 100644 index 0000000..e912e94 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.fr.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Vous possédez déjà un compte ? + + + Courriel + + + J'accepte les conditions d'utilisation et la politique de confidentialité + + + Mot de passe + + + Numéro de téléphone + + + S'inscrire + + + Se connecter + + + S'inscrire + + + Nom d'utilisateur + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.id.resx new file mode 100644 index 0000000..a9f2a0d --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.id.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Sudah punya akun? + + + E-mail + + + Saya setuju akan ketentuan dan kebijakan privasi + + + Sandi + + + Nomor Telepon + + + Daftar + + + Masuk + + + Daftar + + + Nama pengguna + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.it.resx new file mode 100644 index 0000000..9cb4fdc --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.it.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Sei già registrato? + + + E-Mail + + + Accetto i termini e la privacy + + + Telefono + + + Registrati + + + Accedi + + + Iscriviti + + + Utente + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.km.resx new file mode 100644 index 0000000..f6f8870 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.km.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + មានគណនីរួចហើយ? + + + អ៊ីមែល + + + ខ្ញុំយល់ស្របនឹងលក្ខខណ្ឌនិងភាពឯកជន + + + លេខសម្ងាត់ + + + លេខទូរស័ព្ទ + + + ចុះឈ្មោះ + + + ចូល + + + ចុះ​ឈ្មោះ + + + ឈ្មោះ​អ្នកប្រើប្រាស់ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.nl.resx new file mode 100644 index 0000000..0be70ca --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.nl.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Heb je al een account? + + + E-mail + + + Ik ga akkoord met de voorwaarden en privacy + + + Wachtwoord + + + Telefoonnummer + + + Registreren + + + Aanmelden + + + Inschrijven + + + Gebruikersnaam + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.ru.resx new file mode 100644 index 0000000..1ac7f04 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.ru.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Уже имеете аккаунт? + + + E-mail + + + Я согласен с условиями и конфиденциальностью + + + Пароль + + + Номер телефона + + + Зарегистрировать + + + Авторизация + + + Регистрация + + + Username + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.sv.resx new file mode 100644 index 0000000..a8984ec --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Register.sv.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Har du redan ett konto? + + + Epost + + + Jag godkänner villkoren och integriteten + + + Lösenord + + + Telefonnummer + + + Registrera + + + Logga In + + + Bli Medlem + + + Användarnamn + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.ar.resx new file mode 100644 index 0000000..dfc9fd2 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.ar.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أوافق على الشروط والخصوصية + + + كلمة مرور جديدة + + + ضع كلمة مرور جديدة + + + لم يتم العثور على الرمز! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.de.resx new file mode 100644 index 0000000..530dfed --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.de.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ich stimme den Nutzungs- und Datenschutzbestimmungen zu. + + + Neues Passwort + + + Neues Passwort festlegen + + + Token nicht gefunden! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.en.resx new file mode 100644 index 0000000..51f60ad --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.en.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + I agree to the terms and privacy + + + New Password + + + Set new password + + + Token Not Found! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.es.resx new file mode 100644 index 0000000..f6f44bc --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.es.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acepto los términos y condiciones + + + Nueva contraseña + + + Establecer contraseña + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.fr.resx new file mode 100644 index 0000000..8019f31 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.fr.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + J'accepte les conditions d'utilisation et la politique de confidentialité + + + Nouveau mot de passe + + + Définir le nouveau mot de passe + + + Jeton introuvable ! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.id.resx new file mode 100644 index 0000000..d169911 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.id.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Saya setuju akan ketentuan dan kebijakan privasi + + + Sandi baru + + + Atur sandi baru + + + Token Tidak Ditemukan! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.it.resx new file mode 100644 index 0000000..0d29f14 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.it.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Accetto i termini e la privacy + + + Nuova Password + + + Token non trovato! + + + Imposta nuova password + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.km.resx new file mode 100644 index 0000000..e302b84 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.km.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ខ្ញុំយល់ស្របនឹងលក្ខខណ្ឌនិងភាពឯកជន + + + ពាក្យសម្ងាត់​ថ្មី + + + កំណត់ពាក្យសម្ងាត់ថ្មី + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.nl.resx new file mode 100644 index 0000000..30f308e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.nl.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ik ga akkoord met de voorwaarden en privacy + + + Nieuw wachtwoord + + + Nieuw wachtwoord instellen + + + Token niet gevonden! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.ru.resx new file mode 100644 index 0000000..acf21ac --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.ru.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Я согласен с условиями и конфиденциальностью + + + Новый пароль + + + Установить новый пароль + + + Токен не найден! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.sv.resx new file mode 100644 index 0000000..f1f44a3 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Account/Reset.sv.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Jag godkänner villkoren och integriteten + + + Nytt Lösenord + + + Det nya lösenordet + + + Token hittades inte! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.ar.resx new file mode 100644 index 0000000..c331d00 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.ar.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You were successfully logged out. + + + Click here to log back in + + + Logging you in... + + + Checking permissions... + + + Sorry, your login failed. Please try again or contact support. + + + Logging you out... + + + Sorry, log out operation failed. Please try again or contact support. + + + Retrieving profile... + + + Registering account... + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.de.resx new file mode 100644 index 0000000..94f8d99 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.de.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Du wurdest erfolgreich ausgeloggt. + + + Klicke hier, um dich wieder einzuloggen. + + + Du wirst eingeloggt... + + + Überprüfe Berechtigungen... + + + Entschuldigung, dein Login ist fehlgeschlagen. Versuche es noch einmal oder kontaktiere den Support. + + + Du wirst ausgeloggt... + + + Entschuldigung, dein Logout ist fehlgeschlagen. Versuche es noch einmal oder kontaktiere den Support. + + + Profil wird abgerufen... + + + Konto wird registriert... + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.en.resx new file mode 100644 index 0000000..c331d00 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.en.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You were successfully logged out. + + + Click here to log back in + + + Logging you in... + + + Checking permissions... + + + Sorry, your login failed. Please try again or contact support. + + + Logging you out... + + + Sorry, log out operation failed. Please try again or contact support. + + + Retrieving profile... + + + Registering account... + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.es.resx new file mode 100644 index 0000000..c331d00 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.es.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You were successfully logged out. + + + Click here to log back in + + + Logging you in... + + + Checking permissions... + + + Sorry, your login failed. Please try again or contact support. + + + Logging you out... + + + Sorry, log out operation failed. Please try again or contact support. + + + Retrieving profile... + + + Registering account... + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.fr.resx new file mode 100644 index 0000000..c331d00 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.fr.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You were successfully logged out. + + + Click here to log back in + + + Logging you in... + + + Checking permissions... + + + Sorry, your login failed. Please try again or contact support. + + + Logging you out... + + + Sorry, log out operation failed. Please try again or contact support. + + + Retrieving profile... + + + Registering account... + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.id.resx new file mode 100644 index 0000000..c331d00 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.id.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You were successfully logged out. + + + Click here to log back in + + + Logging you in... + + + Checking permissions... + + + Sorry, your login failed. Please try again or contact support. + + + Logging you out... + + + Sorry, log out operation failed. Please try again or contact support. + + + Retrieving profile... + + + Registering account... + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.it.resx new file mode 100644 index 0000000..c015459 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.it.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Sei stato disconnesso con successo. + + + Clicca qui per accedere indietro + + + Registrarti in ... + + + Controllo Autorizzazioni ... + + + Siamo spiacenti, il tuo login è fallito. Si prega di riprovare o contattare il supporto. + + + Disattivandoti ... + + + Siamo spiacenti, operazione di disconnessione fallito. Si prega di riprovare o contattare il supporto. + + + Recupero del profilo ... + + + Registrazione dell'account ... + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.km.resx new file mode 100644 index 0000000..c331d00 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.km.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You were successfully logged out. + + + Click here to log back in + + + Logging you in... + + + Checking permissions... + + + Sorry, your login failed. Please try again or contact support. + + + Logging you out... + + + Sorry, log out operation failed. Please try again or contact support. + + + Retrieving profile... + + + Registering account... + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.nl.resx new file mode 100644 index 0000000..c331d00 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.nl.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You were successfully logged out. + + + Click here to log back in + + + Logging you in... + + + Checking permissions... + + + Sorry, your login failed. Please try again or contact support. + + + Logging you out... + + + Sorry, log out operation failed. Please try again or contact support. + + + Retrieving profile... + + + Registering account... + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.ru.resx new file mode 100644 index 0000000..c331d00 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.ru.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You were successfully logged out. + + + Click here to log back in + + + Logging you in... + + + Checking permissions... + + + Sorry, your login failed. Please try again or contact support. + + + Logging you out... + + + Sorry, log out operation failed. Please try again or contact support. + + + Retrieving profile... + + + Registering account... + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.sv.resx new file mode 100644 index 0000000..c331d00 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Authentication.sv.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You were successfully logged out. + + + Click here to log back in + + + Logging you in... + + + Checking permissions... + + + Sorry, your login failed. Please try again or contact support. + + + Logging you out... + + + Sorry, log out operation failed. Please try again or contact support. + + + Retrieving profile... + + + Registering account... + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.ar.resx new file mode 100644 index 0000000..14e0972 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.ar.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + تم! + + + البريد الإلكتروني + + + أدخل عنوان البريد الإلكتروني المرتبط بحسابك وستتلقى رسالة بريد إلكتروني تحتوي على رابط لإعادة تعيين كلمة المرور الخاصة بك + + + هل نسيت كلمة السر? + + + إعادة تعيين كلمة المرور + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.de.resx new file mode 100644 index 0000000..f949b86 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.de.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Fertig! + + + E-Mail + + + E-Mail-Adresse eingeben, mit welcher das Konto verknüpft ist, um eine E-Mail zum zurücksetzen des Passworts zu erhalten. + + + Passwort vergessen? + + + Passwort zurücksetzen + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.en.resx new file mode 100644 index 0000000..5e4f57a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.en.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Done! + + + E-Mail + + + Enter the email address linked to your account and you will recieve an email containing a link to reset your password + + + Forgot password? + + + Reset Password + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.es.resx new file mode 100644 index 0000000..31824cf --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.es.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Correo + + + Ingresa la dirección de correo vinculada a su cuenta y recibirá un correo con un enlace para blanquear la contraseña + + + ¿Olvidó su contraseña? + + + Blanquear contraseña + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.fr.resx new file mode 100644 index 0000000..d887377 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.fr.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Terminé ! + + + Courriel + + + Sasissez le courriel lié à votre compte et vous y recevrez un message contenant un lien pour réinitialiser votre mot de passe + + + Mot de passe oublié ? + + + Réinitialiser le mot de passe + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.id.resx new file mode 100644 index 0000000..52c8afd --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.id.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Selesai! + + + E-Mail + + + Masukkan alamat email yang terhubung ke akun anda dan anda akan menerima email berisi link untuk mereset password anda + + + Lupa password? + + + Reset Password + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.it.resx new file mode 100644 index 0000000..b300815 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.it.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Password dimenticata? + + + E-Mail + + + Ripristina Password + + + Fatto! + + + Inserisci l'indirizzo E-Mail collegato al tuo utente e riceverai un link per il ripristino della password. + + + Possiamo aiutarti ripristinando la password. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.km.resx new file mode 100644 index 0000000..b574e84 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.km.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + អ៊ីម៉ែល + + + បញ្ចូលអាសយដ្ឋានអ៊ីមែលដែលភ្ជាប់ទៅគណនីរបស់អ្នកហើយអ្នកនឹងទទួលបានអ៊ីមែលដែលមានតំណភ្ជាប់ដើម្បីកំណត់លេខសម្ងាត់របស់អ្នកឡើងវិញ + + + ភ្លេច​លេខសំងាត់​? + + + កំណត់ពាក្យសម្ងាត់ឡើងវិញ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.nl.resx new file mode 100644 index 0000000..d725b6c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.nl.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + E-mail + + + Voer het e-mailadres in dat aan uw account is gekoppeld en u ontvangt een e-mail met een link om uw wachtwoord opnieuw in te stellen + + + Wachtwoord vergeten? + + + Wachtwoord opnieuw instellen + + + Klaar! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.ru.resx new file mode 100644 index 0000000..9ff2cdc --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.ru.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Готово! + + + E-Mail + + + Введите email-адрес, прикреплённый к вашему аккаунту, и вы получите письмо, соржащее ссылку для сброса вашего пароля + + + Забыли пароль? + + + Сбросить пароль + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.sv.resx new file mode 100644 index 0000000..7553815 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/ForgotPassword.sv.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Klart! + + + Epost + + + Fyll i din Epost-adress kopplat till ditt konto och du får ett mail med en länk för att nollställa ditt lösenord. + + + Glömt Lösenord? + + + Nollställ Lösenord + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.ar.resx new file mode 100644 index 0000000..a30f0a0 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.ar.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + تسجيل الدخول مع أوراق الاعتماد الخاصة بك. + + + ليس لديك حساب؟ + + + بريد الالكتروني + + + البريد الالكتروني مطلوب! + + + قم بتعبئة بيانات اعتماد المسؤول + + + املأ بيانات اعتماد المستخدم الأساسية + + + هل نسيت كلمة السر؟ + + + كلمه السر + + + كلمة المرور مطلوبة! + + + سجل هنا + + + تذكرنى؟ + + + تسجيل الدخول + + + عنوان + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.de.resx new file mode 100644 index 0000000..4812f2f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.de.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Mit Zugangsdaten anmelden + + + Du hast noch keine Konto? + + + E-Mail + + + E-Mail wird benötigt. + + + Gib deine Zugangsdaten + + + Mit Zugangsdaten des Administrators ausfüllen + + + Mit Basis-Zugangsdaten ausfüllen + + + Passwort vergessen? + + + Passwort + + + Passwort wird benötigt! + + + Registriere dich hier + + + Zugangsdaten speichern? + + + Anmelden + + + Anmelden + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.en.resx new file mode 100644 index 0000000..e13f761 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.en.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Login with your Credentials. + + + Don't have an account? + + + E-mail + + + Email is required! + + + Enter your credentials to get started. + + + Fill Administrator Credentials + + + Fill Basic User Credentials + + + Forgot password? + + + Password + + + Password is required! + + + Register here + + + Remember me? + + + Sign In + + + Sign In + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.es.resx new file mode 100644 index 0000000..3c5e771 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.es.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ingrese con sus credenciales. + + + ¿No tiene una cuenta? + + + Correo + + + El Correo es requerido! + + + Completar con Credenciales Administrador + + + Completar con Credenciales Usuario + + + ¿Olvidó su Contraseña? + + + Contraseña + + + La Contraseña es requerida! + + + Registrarse aquí + + + ¿Recordarme? + + + Ingresar + + + Ingresar + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.fr.resx new file mode 100644 index 0000000..8692631 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.fr.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Connectez-vous avec vos identifiants. + + + Courriel + + + Un courriel est requis ! + + + Mot de passe oublié ? + + + Mot de passe + + + Mot de passe requis ! + + + Se souvenir de moi ? + + + Connexion + + + Connexion + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.id.resx new file mode 100644 index 0000000..28006ca --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.id.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Masuk dengan Kredensial Anda. + + + Tidak punya akun? + + + E-mail + + + Email wajib diisi! + + + Isi Kredensial Administrator + + + Isi Kredensial Pengguna Basic + + + Lupa sandi? + + + Sandi + + + Sandi wajib diisi! + + + Daftar di sini + + + Ingat saya? + + + Masuk + + + Masuk + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.it.resx new file mode 100644 index 0000000..bb48a76 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.it.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Accedi con le tue credenziali. + + + E-Mail + + + È richiesto un indirizzo E-Mail + + + Inserisci le tue credenziali per iniziare. + + + Utilizza credenziali amministrative + + + Utilizza credenziali utente base + + + Password dimenticata? + + + Password + + + È richiesta una password! + + + Ricordati di me? + + + Accedi + + + Accedi + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.km.resx new file mode 100644 index 0000000..1bf008e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.km.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ឡុកចូលប្រព័ន្ធជាមួយលេខកូដសម្ងាត់អ្នក + + + អ៊ីម៉ែល + + + ត្រូវការបំពេញអ៊ីម៉ែល + + + ភ្លេចលេខកូដសម្ងាត់? + + + លេខកូដសម្ងាត់ + + + ត្រូវការបំពេញលេខកូដសម្ងាត់ + + + ចងចាំក្នុងប្រព័ន្ធ? + + + ឡុកចូល + + + ឡុកចូល + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.nl.resx new file mode 100644 index 0000000..e0d271e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.nl.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Log in met uw inloggegevens. + + + E-mail + + + E-mail is vereist! + + + Wachtwoord vergeten? + + + Wachtwoord + + + Wachtwoord is vereist! + + + Aanmelden + + + Aanmelden + + + Heb je geen account? + + + Beheerdersreferenties invullen + + + Basisgebruikersreferenties invullen + + + Schrijf je hier in + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.ru.resx new file mode 100644 index 0000000..ad69eb7 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.ru.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Авторизуйтесь с помощью ваших учётных данных. + + + У вас ещё нет аккаунта? + + + E-mail + + + Email обязателен! + + + Заполнить учётными данными администратора + + + Заполнить учётными данными пользователя с базовыми правами + + + Забыли пароль? + + + Пароль + + + Пароль обязателен! + + + Зарегистрируйтесь здесь + + + Запомнить меня? + + + Авторизоваться + + + Авторизация + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.sv.resx new file mode 100644 index 0000000..d236777 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Login.sv.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Logga in med dina uppgifter + + + Har du inget konto? + + + Epost + + + Epost är obligatoriskt + + + Fyll i Administratör Användaruppgifter + + + Fyll i Grundläggande Användaruppgifter + + + Glömt Lösenord? + + + Lösenord + + + Lösenord är obligatoriskt! + + + Registrera här + + + Kom ihåg mig? + + + Logga In + + + Logga In + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.ar.resx new file mode 100644 index 0000000..94332f5 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.ar.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + هل لديك حساب؟ + + + تأكيد كلمة المرور + + + بريد الالكتروني + + + الاسم الأول + + + الكنية + + + كلمه السر + + + رقم الهاتف + + + يسجل + + + تسجيل الدخول + + + اسم االمستخدم + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.de.resx new file mode 100644 index 0000000..1bfb8a3 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.de.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Du hast schon ein Konto? + + + Passwort bestätigen + + + E-Mail + + + Vorname + + + Nachname + + + Passwort + + + Telefonnummer + + + Registrieren + + + Einloggen + + + Benutzername + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.en.resx new file mode 100644 index 0000000..fe26547 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.en.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Already have an account? + + + Confirm Password + + + E-mail + + + First Name + + + Last Name + + + Password + + + Phone Number + + + Register + + + Sign In + + + User Name + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.es.resx new file mode 100644 index 0000000..8010e7c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.es.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ¿Ya tiene una cuenta? + + + Confirmar Contraseña + + + Correo + + + Nombre + + + Apellido + + + Contraseña + + + Número de Teléfono + + + Registrarse + + + Ingresar + + + Nombre de Usuario + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.fr.resx new file mode 100644 index 0000000..41e6323 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.fr.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Vous possédez déjà un compte ? + + + Confirmation du mot de passe + + + Courriel + + + Prénom + + + Nom + + + Mot de passe + + + Numéro de téléphone + + + S'inscrire + + + Se connecter + + + Nom d'utilisateur + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.id.resx new file mode 100644 index 0000000..bbc2810 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.id.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Sudah punya akun? + + + Konfirmasi Password + + + E-mail + + + Nama Depan + + + Nama Belakang + + + Sandi + + + Nomor Telepon + + + Daftar + + + Masuk + + + User Name + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.it.resx new file mode 100644 index 0000000..86387eb --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.it.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Hai già un account? + + + Conferma Password + + + E-mail + + + Nome + + + Cognome + + + Accetto i termini e la privacy + + + Telefono + + + Registrati + + + Registrati + + + Username + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.km.resx new file mode 100644 index 0000000..0cf656e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.km.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + មានគណនីរួចហើយ? + + + បញ្ជាក់លេខកូដសម្ងាត់ + + + អ៊ីម៉ែល + + + នាមខ្លួន + + + នាមត្រកូល + + + លេខកូដសម្ងាត់ + + + លេខទូរស័ព្ទ + + + ចុះឈ្មោះ + + + ឡុកចូល + + + ឈ្មោះអ្នកប្រើប្រាស់ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.nl.resx new file mode 100644 index 0000000..e355b93 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.nl.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Heb je al een account? + + + Wachtwoord bevestigen + + + E-mail + + + Voornaam + + + Achternaam + + + Wachtwoord + + + Telefoonnummer + + + Registreren + + + Aanmelden + + + Gebruikersnaam + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.ru.resx new file mode 100644 index 0000000..6d4d7ed --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.ru.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + У вас уже есть аккаунт? + + + Подтверждение пароля + + + E-mail + + + Имя + + + Фамилия + + + Пароль + + + Номер телефона + + + Зарегистрировать + + + Авторизоваться + + + User Name + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.sv.resx new file mode 100644 index 0000000..d3ac6a2 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Authentication/Register.sv.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Har du redan ett konto? + + + Bekräfta lösenord + + + E-post + + + Förnamn + + + Efternamn + + + Lösenord + + + Telefonnummer + + + Registrera dig + + + Logga In + + + Användarnamn + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.ar.resx new file mode 100644 index 0000000..32a2c4e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.ar.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أضف العلامة التجارية + + + تم حفظ العلامة التجارية! + + + تم تحديث العلامة التجارية! + + + إلغاء + + + وصف + + + المعرّف + + + اسم + + + حفظ + + + ضريبة + + + تحديث + + + تحديث العلامة التجارية + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.de.resx new file mode 100644 index 0000000..618b6ed --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.de.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Marke hinzufügen + + + Marke gespeichert! + + + Marke aktualisiert! + + + Abbrechen + + + Beschreibung + + + Id + + + Name + + + Speichern + + + Steuer + + + Aktualisieren + + + Martke Aktualisieren + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.en.resx new file mode 100644 index 0000000..b8de313 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.en.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Brand + + + Brand Saved! + + + Brand Updated! + + + Cancel + + + Description + + + Id + + + Name + + + Save + + + Tax + + + Update + + + Update Brand + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.es.resx new file mode 100644 index 0000000..bb9b491 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.es.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Agregar Marca + + + Marca Guardada! + + + Marca Actualizada! + + + Cancelar + + + Descripción + + + Id + + + Nombre + + + Guardar + + + Impuestos + + + Actualizar + + + Actualizar Marca + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.fr.resx new file mode 100644 index 0000000..732642a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.fr.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ajouter une marque + + + Marque enregistrée ! + + + Marque mise à jour ! + + + Annuler + + + Description + + + Identifiant + + + Nom + + + Sauvegarder + + + Taxe + + + Mettre à jour + + + Édition d'une marque + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.id.resx new file mode 100644 index 0000000..635c20b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.id.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tambah Merek + + + Merek Tersimpan! + + + Merek Diperbarui! + + + Batal + + + Deskripsi + + + Id + + + Nama + + + Simpan + + + Pajak + + + Perbarui + + + Perbarui Merek + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.it.resx new file mode 100644 index 0000000..56dc1eb --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.it.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Nuova marca + + + Marca salvata! + + + Marca aggiornata! + + + Annulla + + + Descrizione + + + Id + + + Nome + + + Salva + + + Imposta + + + Aggiorna + + + Aggiorna marca + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.km.resx new file mode 100644 index 0000000..f29d99f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.km.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + បន្ថែមម៉ាក + + + ម៉ាកបានរក្សាទុក! + + + ម៉ាកបានធ្វើបច្ចុប្បន្នភាព + + + បោះបង់ + + + ការពិពណ៌នា + + + លេខកូដសម្ងាល់ + + + ឈ្មោះ + + + រក្សាទុក + + + ពន្ធ + + + បច្ចុប្បន្នភាព + + + បច្ចុប្បន្នភាពម៉ាក + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.nl.resx new file mode 100644 index 0000000..13c6a94 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.nl.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Merk toevoegen + + + Merk gered! + + + Merk bijgewerkt! + + + Annuleren + + + Beschrijving + + + Id + + + Naam + + + Opslaan + + + Belasting + + + Update + + + Merk bijwerken + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.ru.resx new file mode 100644 index 0000000..2e506f3 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditBrandModal.ru.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Добавить бренд + + + Бренд сохранён + + + Бренд обновлён + + + Отмена + + + Описание + + + Id + + + Наименование + + + Сохранить + + + Сбор + + + Обновить + + + Обновить бренд + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.ar.resx new file mode 100644 index 0000000..bcb9ce0 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.ar.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أضف منتج + + + الشفره + + + ماركة + + + إلغاء + + + حذف + + + وصف + + + المعرّف + + + اسم + + + تم حفظ المنتج! + + + تم تحديث المنتج! + + + تقييم + + + حفظ + + + تحديث + + + تحديث المنتج + + + تحميل + + + عرض + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.de.resx new file mode 100644 index 0000000..1bf6eaa --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.de.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Produkt hinzufügen + + + Strichcode + + + Marke + + + Abbrechen + + + Löschen + + + Beschreibung + + + Id + + + Name + + + Produkte gespeichert + + + Produkt aktualisiert + + + Bewertung + + + Speichern + + + Aktualisieren + + + Produkt aktualisieren + + + Upload + + + Ansicht + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.en.resx new file mode 100644 index 0000000..ef00fca --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.en.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Product + + + Barcode + + + Brand + + + Cancel + + + Delete + + + Description + + + Id + + + Name + + + Product Saved! + + + Product Updated! + + + Rate + + + Save + + + Update + + + Update Product + + + Upload + + + View + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.es.resx new file mode 100644 index 0000000..1dabb2f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.es.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Agregar Producto + + + Código de barra + + + Marca + + + Cancelar + + + Eliminar + + + Descripción + + + Id + + + Nombre + + + Producto Guardado! + + + Producto Actualizado! + + + Precio + + + Guardar + + + Actualizar + + + Actualizar Producto + + + Subir + + + Ver + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.fr.resx new file mode 100644 index 0000000..4ba8a22 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.fr.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ajouter un produit + + + Code barre + + + Marque + + + Annuler + + + Supprimer + + + Description + + + Identifiant + + + Nom + + + Produit enregistré ! + + + Produit mis à jour ! + + + Note + + + Sauvegarder + + + Mettre à jour + + + Édition d'un produit + + + Téléverser + + + Voir + + diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.id.resx new file mode 100644 index 0000000..770fbfa --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.id.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tambah Produk + + + Barcode + + + Merek + + + Batal + + + Hapus + + + Deskripsi + + + Id + + + Nama + + + Produk Tersimpan! + + + Produk Diperbarui! + + + Nilai + + + Simpan + + + Perbarui + + + Perbarui Produk + + + Unggah + + + View + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.it.resx new file mode 100644 index 0000000..1d11a75 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.it.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aggiungi prodotto + + + Barcode + + + Marca + + + Annulla + + + Elimina + + + Descrizione + + + Id + + + Nome + + + Prodotto Salvato! + + + Prodotto Aggiornato! + + + Vota + + + Salva + + + Aggiorna + + + Aggiorna Prodotto + + + Carica + + + View + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.km.resx new file mode 100644 index 0000000..06f7050 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.km.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + បន្ថែមផលិតផល + + + បាកូដ + + + ម៉ាក + + + បោះបង់ + + + លុប + + + ការពិពណ៌នា + + + លេខកូដសម្ងាល់ + + + ឈ្មោះ + + + ផលិតផលបានរក្សាទុក + + + ផលិតផលបានធ្វើបច្ចុប្បន្នភាព + + + អត្រា + + + រក្សាទុក + + + បច្ចុប្បន្នភាព + + + ធ្វើបច្ចុប្បន្នភាពផលិតផល + + + ផ្ទុកឡើង + + + បង្ហាញ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.nl.resx new file mode 100644 index 0000000..f81d047 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.nl.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Product toevoegen + + + Barcode + + + Merk + + + Annuleren + + + Verwijderen + + + Beschrijving + + + Id + + + Naam + + + Product opgeslagen! + + + Product bijgewerkt! + + + Verhouding + + + Opslaan + + + Update + + + Product bijwerken + + + Uploaden + + + Bekijken + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.ru.resx new file mode 100644 index 0000000..58dbb12 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.ru.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Добавить продукт + + + Баркод + + + Бренд + + + Отмена + + + Удалить + + + Описание + + + Id + + + Наименование + + + Продукт сохранён + + + Продукт обновлён + + + Рейтинг + + + Сохранить + + + Обновить + + + Обновить продукт + + + Загрузить + + + Просмотр + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.sv.resx new file mode 100644 index 0000000..1882727 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/AddEditProductModal.sv.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Lägg till produkt + + + Streckkod + + + Varumärke + + + Avbryt + + + Radera + + + Beskrivning + + + Id + + + Namn + + + Produkt Sparad! + + + Produkt Uppdaterad! + + + Betygsätt + + + Spara + + + Uppdatera + + + Uppdatera Produkt + + + Ladda upp + + + View + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.ar.resx new file mode 100644 index 0000000..45c2a98 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.ar.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أجراءات + + + أضف العلامة التجارية + + + يحدها + + + العلامات التجارية + + + تصدير الماركات + + + إنشاء + + + حذف + + + حذف المحتوى + + + كثيف + + + وصف + + + تعديل + + + تصدير + + + تم تصدير العلامات التجارية المفلترة + + + المعرّف + + + استيراد + + + إدارة العلامات التجارية. + + + اسم + + + لا توجد إجراءات مسموح بها + + + إعادة تحميل + + + ابحث عن العلامات التجارية + + + مخطط + + + ضريبة + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.de.resx new file mode 100644 index 0000000..88c287c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.de.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktionen + + + Marke hinzufügen + + + Gerahmt + + + Marken + + + Marken exportiert + + + Hinzufügen + + + Löschen + + + Inhalt löschen + + + Schmal + + + Beschreibung + + + Bearbeiten + + + Exportieren + + + Gefilterte Marken exportiert + + + Id + + + Importieren + + + Marken verwalten. + + + Name + + + Keine Aktionen erlaubt + + + Neu laden + + + Nach Marken suchen + + + Gebändert + + + Steuer + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.en.resx new file mode 100644 index 0000000..27b237c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.en.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Add Brand + + + Bordered + + + Brands + + + Brands exported + + + Create + + + Delete + + + Delete Content + + + Dense + + + Description + + + Edit + + + Export + + + Filtered Brands exported + + + Id + + + Import + + + Manage Brands. + + + Name + + + No Allowed Actions + + + Reload + + + Search for Brands + + + Striped + + + Tax + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.es.resx new file mode 100644 index 0000000..35aebe0 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.es.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acciones + + + Agregar Marca + + + Bordeado + + + Marcas + + + Marcas Exportadas + + + Crear + + + Borrar + + + ¿Desea eliminar el registro? + + + Denso + + + Descripción + + + Editar + + + Exportar + + + Marcas filtradas exportadas + + + Id + + + Importar + + + Gestionar Marcas + + + Nombre + + + Acciones no Permitidas + + + Recargar + + + Buscar Marcas + + + Rayado + + + Impuestos + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.fr.resx new file mode 100644 index 0000000..5ccf553 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.fr.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Ajouter un marque + + + Avec bordures + + + Marques + + + Marques exportées + + + Créer + + + Supprimer + + + Supprimer la marque + + + Dense + + + Description + + + Éditer + + + Exporter + + + Marques filtrées exportées + + + Identifiant + + + Importer + + + Gérer les marques + + + Nom + + + Aucune action autorisée + + + Recharger + + + Chercher des marques + + + Rayé + + + Taxe + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.id.resx new file mode 100644 index 0000000..81a2f01 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.id.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tindakan + + + Tambah Merek + + + Merek + + + Brands exported + + + Tambah + + + Hapus + + + Hapus Konten + + + Deskripsi + + + Sunting + + + Ekspor + + + Filtered Brands exported + + + Id + + + Import + + + Kelola Merek. + + + Nama + + + No Allowed Actions + + + Muat Ulang + + + Cari Merek + + + Pajak + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.it.resx new file mode 100644 index 0000000..346068b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.it.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Azioni + + + Aggiungi marca + + + Marche + + + Brands exported + + + Crea + + + Elimina + + + Cancella contenuto + + + Descrizione + + + Modifica + + + Export + + + Filtered Brands exported + + + Id + + + Import + + + Gestione marca. + + + Nome + + + Nessuna azione consentita + + + Ricarica + + + Ricerca marche + + + Imposta + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.km.resx new file mode 100644 index 0000000..20a35b7 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.km.resx @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + មុខងារ + + + បន្ថែមម៉ាក + + + ម៉ាក + + + ម៉ាកបាននាំចេញ + + + បង្កើត + + + លុប + + + ការពិពណ៌នា + + + កែប្រែ + + + នាំចេញ + + + ច្រោះម៉ាកបាននាំចេញ + + + លេខកូដសម្ងាល់ + + + Import + + + គ្រប់គ្រងម៉ាក + + + ឈ្មោះ + + + មិនមានសិទ្ធិ + + + ផ្ទុកឡើងវិញ + + + ស្វែងរកម៉ាក + + + ពន្ធ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.nl.resx new file mode 100644 index 0000000..d3e5aec --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.nl.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acties + + + Merk toevoegen + + + Grenst aan + + + Merken + + + Geëxporteerde merken + + + Aanmaken + + + Verwijderen + + + Inhoud verwijderen + + + Dicht + + + Beschrijving + + + Bewerken + + + Exporteren + + + Gefilterde merken geëxporteerd + + + Id + + + Importeren + + + Beheer merken. + + + Naam + + + Geen toegestane acties + + + Herladen + + + Zoeken naar merken + + + Gestreept + + + Belasting + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.ru.resx new file mode 100644 index 0000000..1c34c46 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.ru.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Действия + + + Добавить бренд + + + Обрамлённый + + + Бренды + + + Бренды экспортированы + + + Создать + + + Удалить + + + Удалить контент + + + Компактный + + + Описание + + + Редактировать + + + Экспорт в Excel + + + Отфильтрованные бренды экспортированы + + + Id + + + Импорт + + + Управление брендами. + + + Наименование + + + Нет доступных действий + + + Перезагрузить + + + Поиск брендов... + + + Чередующийся + + + Сбор + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.sv.resx new file mode 100644 index 0000000..934d8d1 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Brands.sv.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Åtgärder + + + Lägg till varumärke + + + Varumärken + + + Brands exported + + + Skapa + + + Radera + + + Ta bort innehåll + + + Beskrivning + + + Redigera + + + Exportera + + + Filtered Brands exported + + + Id + + + Import + + + Hantera varumärken. + + + Namn + + + No Allowed Actions + + + Ladda om + + + Sök efter varumärken + + + Moms + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.ar.resx new file mode 100644 index 0000000..e84ef69 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.ar.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أجراءات + + + الشفره + + + يحدها + + + ماركة + + + إنشاء + + + حذف + + + حذف المحتوى + + + كثيف + + + وصف + + + تعديل + + + تصدير + + + تصدير المنتجات المفلترة + + + المعرّف + + + إدارة المنتجات. + + + اسم + + + لا توجد إجراءات مسموح بها + + + منتجات + + + تصدير المنتجات + + + تقييم + + + إعادة تحميل + + + بحث + + + مخطط + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.de.resx new file mode 100644 index 0000000..d3ab068 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.de.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktionen + + + Strichcode + + + Gerahmt + + + Marke + + + Hinzufügen + + + Löschen + + + Inhalt löschen + + + Schmal + + + Beschreibung + + + Bearbeiten + + + Exportieren + + + Gefilterte Produkte exportiert + + + Id + + + Produkte verwalten + + + Maximale Bewertung + + + Minimale Bewertung + + + Name + + + Keine Aktionen erlaubt + + + Produkte + + + Produkte exportiert + + + Bewertung + + + Neu laden + + + Suchen + + + Gebändert + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.en.resx new file mode 100644 index 0000000..1c633ca --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.en.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Barcode + + + Bordered + + + Brand + + + Create + + + Delete + + + Delete Content + + + Dense + + + Description + + + Edit + + + Export + + + Filtered Products exported + + + Id + + + Manage Products. + + + Maximum Rate + + + Minimum Rate + + + Name + + + No Allowed Actions + + + Products + + + Products exported + + + Rate + + + Reload + + + Search + + + Striped + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.es.resx new file mode 100644 index 0000000..3da508d --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.es.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acciones + + + Código de barra + + + Bordeado + + + Marca + + + Crear + + + Borrar + + + ¿Desea eliminar el registro? + + + Denso + + + Descripción + + + Editar + + + Exportar + + + Productos filtrados exportados + + + Id + + + Gestionar Productos + + + Nombre + + + Acciones no Permitidas + + + Productos + + + Productos exportados + + + Precio + + + Recargar + + + Buscar + + + Rayado + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.fr.resx new file mode 100644 index 0000000..ebf66a8 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.fr.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Code barre + + + Avec bordures + + + Marque + + + Créer + + + Supprimer + + + Supprimer le produit + + + Dense + + + Description + + + Éditer + + + Exporter + + + Produits filtrés exportés + + + Identifiant + + + Gérer les produits. + + + Nom + + + Aucune action autorisée + + + Produits + + + Products exported + + + Note + + + Recharger + + + Chercher + + + Rayé + + diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.id.resx new file mode 100644 index 0000000..15d8d77 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.id.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tindakan + + + Barcode + + + Merek + + + Tambah + + + Hapus + + + Hapus Konten + + + Deskripsi + + + Sunting + + + Ekspor + + + Filtered Products exported + + + Id + + + Kelola Produk. + + + Nama + + + No Allowed Actions + + + Produk + + + Products exported + + + Nilai + + + Muat Ulang + + + Cari + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.it.resx new file mode 100644 index 0000000..a218fa3 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.it.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Azioni + + + Descrizione + + + Id + + + Nome + + + Prodotti + + + Ricarica + + + Marca + + + Cancella contenuto + + + Ricerca + + + Tasso + + + Gestione prodotti. + + + Modifica + + + Elimina + + + Crea + + + Barcode + + + Prodotti esportati + + + Prodotti filtrati esportati + + + Nessuna azione consentita + + + Tasso massimo + + + Tasso minimo + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.km.resx new file mode 100644 index 0000000..6cbf00d --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.km.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + មុខងារ + + + បាកូដ + + + បង្កើត + + + លុប + + + ការពិពណ៌នា + + + កែប្រែ + + + ច្រោះផលិតផលបាននាំចេញ + + + លេខកូដសម្ងាល់ + + + គ្រប់គ្រងផលិតផល + + + ឈ្មោះ + + + គ្មានសិទ្ធិ + + + ផលិតផល + + + ផលិតផលនាំចេញ + + + អត្រា + + + ផ្ទុកឡើងវិញ + + + ស្វែងរក + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.nl.resx new file mode 100644 index 0000000..cc4ced9 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.nl.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acties + + + Barcode + + + Aanmaken + + + Verwijderen + + + Beschrijving + + + Bewerken + + + Gefilterde producten geëxporteerd + + + Id + + + Producten beheren. + + + Naam + + + Geen toegestane acties + + + Producten + + + Uitgevoerde producten + + + Verhouding + + + Herladen + + + Zoeken + + + Grenst aan + + + Merk + + + Inhoud verwijderen + + + Dicht + + + Exporteren + + + Gestreept + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.ru.resx new file mode 100644 index 0000000..b2ae187 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.ru.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Действия + + + Баркод + + + Обрамлённый + + + Бренд + + + Создать + + + Удалить + + + Удалить контент + + + Компактный + + + Описание + + + Редактировать + + + Экспорт в Excel + + + Отфильтрованные продукты экспортированы + + + Id + + + Управление продуктами. + + + Наименование + + + Нет доступных действий + + + Продукты + + + Продукты экспортированы + + + Рейтинг + + + Перезагрузить + + + Поиск продуктов... + + + Чередующийся + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.sv.resx new file mode 100644 index 0000000..43994b0 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Catalog/Products.sv.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Åtgärder + + + Streckkod + + + Varumärke + + + Skapa + + + Radera + + + Ta bort innehåll + + + Beskrivning + + + Redigera + + + Exportera + + + Filtered Products exported + + + Id + + + Hantera Produkter. + + + Namn + + + No Allowed Actions + + + Produkter + + + Products exported + + + Betygsätta + + + Ladda om + + + Sök + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.ar.resx new file mode 100644 index 0000000..6637bd9 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.ar.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + دردشة + + + جهات الاتصال + + + دليل مفصل للمزيد. + + + أدخل رسالتك... + + + مسجّل الدخول. + + + تسجيل الخروج. + + + رسالة جديدة من {0} + + + يرسل + + + هل تريد أن تفهم كيف يتم تنفيذ الدردشة في BlazorHero؟ قم بإحالة هذا + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.de.resx new file mode 100644 index 0000000..0555b5b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.de.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Chat + + + Kontakte + + + Detaillierte Anleitung für mehr. + + + Gibt deine Nachricht ein... + + + Eingeloggt. + + + Ausgeloggt. + + + Neue Nachricht von {0} + + + Absenden + + + Du möchtest verstehen, wie der Chat in FullStackHero implementiert ist? Lies hier + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.en.resx new file mode 100644 index 0000000..7b318d4 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.en.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + chat + + + contacts + + + detailed guide for more. + + + Enter your message... + + + Logged In. + + + Logged Out. + + + New Message From {0} + + + Send + + + Want to understand how Chat is implemented in BlazorHero ? Refer this + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.es.resx new file mode 100644 index 0000000..702f3f7 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.es.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + chat + + + contactos + + + guía detallada para mas. + + + Ingrese su mensaje... + + + Contectado. + + + Desconectado. + + + Nuevo mensaje de {0} + + + Enviar + + + ¿Quiere entender como el Chat está implmentado en BlazorHero? Mirar esta referencia + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.fr.resx new file mode 100644 index 0000000..9b67e0b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.fr.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Conversations + + + Contacts + + + guide détaillé pour en savoir plus. + + + Entrez votre message. + + + Connecté. + + + Déconnecté. + + + Nouveau message de {0} + + + Envoyer + + + Vous voulez comprendre comment le chat est implémenté dans BlazorHero ? Jettez un œil à ce + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.id.resx new file mode 100644 index 0000000..a9e65c4 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.id.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + obrolan + + + kontak + + + panduan rinci lebih lanjut. + + + Tulis pesan anda... + + + Logged In. + + + Logged Out. + + + New Message From {0} + + + Kirim + + + Ingin tau bagaimana cara obrolan diimplementasi di BlazorHero ? Lihat + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.it.resx new file mode 100644 index 0000000..534c625 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.it.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + chat + + + contatti + + + guida dettagliata per saperne di più. + + + Inserisci il tuo messaggio ... + + + Logged In. + + + Logged Out. + + + New Message From {0} + + + Invia + + + Vuoi capire come viene implementata la chat in BlazorHero? Guarda qui + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.km.resx new file mode 100644 index 0000000..f492f0a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.km.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ជជែក + + + ឈ្មោះទំនាក់ទំនង + + + ការណែនាំលំអិត + + + វាយបញ្ចូលសាររបស់អ្នក + + + ឡុកចូល។ + + + ឡុកចេញ។ + + + សារថ្មីមកពី {0} + + + ផ្ញើ + + + ចង់ដឹងអំពីរបៀបសរសេរកូដមុខងារជជែកក្នុងប្លេហ្សឺហេរ៉ូ ចូលទៅកាន់តំណភ្ជាប់នេះ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.nl.resx new file mode 100644 index 0000000..7b2a08f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.nl.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Gesprek + + + Contactpersonen + + + gedetailleerde gids voor meer. + + + Voer uw bericht in... + + + Ingelogd. + + + Uitgelogd. + + + Nieuw bericht van {0} + + + Verzenden + + + Wilt u begrijpen hoe een Chat wordt geïmplementeerd in BlazorHero ? Ga dan naar deze + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.ru.resx new file mode 100644 index 0000000..e2e8a9e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.ru.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + чат + + + контакты + + + подробному руководству для получения дополнительной информации. + + + Введите ваше сообщение... + + + авторизовался. + + + вышел. + + + Новое сообщение от {0} + + + Отправить + + + Хотите понять, как реализован чат в BlazorHero ? Обратитесь к этому + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.sv.resx new file mode 100644 index 0000000..0fa02a8 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Communication/Chat.sv.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + chatt + + + kontakter + + + detaljerad guide för mer. + + + Ditt meddelande... + + + Logged In. + + + Logged Out. + + + New Message From {0} + + + Skicka + + + Vill du förstå hur Chatt implementeras i BlazorHero? Se detta + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.ar.resx new file mode 100644 index 0000000..06018d1 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.ar.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + بليزر للمبتدئين - بدء استخدام بليزر + + + Blazor Hero عبارة عن نموذج للحل الشامل للهندسة المعمارية النظيفة لتجميع الويب Blazor الذي تم إنشاؤه باستخدام + + + بناء تطبيق دردشة مع Blazor ، Identity ، و SignalR + + + الاحتفال بـ 1500 نجمة على جيثب! + + + مكتبة المكونات + + + المصادقة المخصصة في Blazor WebAssembly - بالتفصيل + + + قالب معماري نظيف لـ Blazor Web-Assembly + + + التوثيق - قريبا + + + استكشاف هيكل مشروع Blazor + + + ابدء + + + مستودع جيثب: لا تنسى ترك نجم ؛) + + + إليك بعض المقالات التي من المفترض أن تساعدك في البدء باستخدام Blazor. + + + كيفية تنفيذ Blazor CRUD باستخدام Entity Framework Core؟ + + + تنفيذ Blazor CRUD باستخدام مكتبة مكونات Mudblazor في .NET 5 + + + روابط مهمة + + + في حال كنت عالقًا في أي مكان أو كان لديك أي استفسارات بخصوص هذا التنفيذ ، فقد قمت بتجميع دليل البدء السريع للرجوع إليه + + + مصادر التعلم + + + أحب BlazorHero؟ نجمة لنا على جيثب! + + + هندسة البصل في ASP.NET Core مع CQRS - مفصل + + + صفحة المشروع + + + دليل البدء السريع + + + اقرأ الدليل + + + ادعمني! + + + بلازور هيرو + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.de.resx new file mode 100644 index 0000000..64fdfeb --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.de.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor für Anfänger - Erste Schritte in Blazor + + + Blazor Hero ist ein All-In-One Clean Architecture Lösungstemplate für Blazor Web-Assembly, erstellt mit + + + Baue eine Chat-Anwendung With Blazor, Identity, And SignalR + + + Wir feiern 1,500 Sterne auf Github! + + + Komponentenbibliothek + + + Benutzerdefinierte Authentifizierung in Blazor WebAssembly im Detail + + + Clean Architecture Vorlage für Blazor Web-Assembly + + + Dokumentation - demnächst + + + Erforsche die Blazor Projektstruktur + + + Erste Schritte + + + Github Repository : Vergiss nicht, einen Stern zu hinterlassen ;) + + + Hier sind ein paar Artikel, die dir beimn Einstieg in Blazor helfen sollten. + + + Wie implementierst du Blazor CRUD mit Entity Framework Core? + + + Implementiere Blazor CRUD mit der Mudblazor Komponentenbibliothek in .NET 5 + + + Wichtige Verknüpfungen + + + Falls du irgendwo steckenbleiben solltest, oder Fragen zu dieser Implementierung hast, habe ich eine Schnellstartanleitung für dich erstellt. + + + Lernmittel + + + Dir gefällt BlazorHero? Hinterlasse einen Stern auf Github! + + + Zwiebelarchitektur in ASP.NET Core mit CQRS im Detail + + + Projektseite + + + Schnellstartanleitung + + + Lies die Anleitung + + + Unterstütze mich! + + + Blazor Hero + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.en.resx new file mode 100644 index 0000000..1d1c273 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.en.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor For Beginners – Getting Started With Blazor + + + Blazor Hero is an All-In-One Clean Architecture Solution Template For Blazor Web-Assembly built with + + + Building A Chat Application With Blazor, Identity, And SignalR + + + Celebrating 1,500 Stars on Github! + + + Component Library + + + Custom Authentication In Blazor WebAssembly – Detailed + + + Clean Architecture Template For Blazor Web-Assembly + + + Documentation - Coming Soon + + + Exploring Blazor Project Structure + + + Getting Started + + + Github Repository : Do Not Forget to Leave a Star ;) + + + Here are few articles that should help you get started with Blazor. + + + How To Implement Blazor CRUD Using Entity Framework Core? + + + Implementing Blazor CRUD Using Mudblazor Component Library In .NET 5 + + + Important Links + + + In case you are stuck anywhere or have any queries regarding this implementation, I have compiled a Quick Start Guide for you reference. + + + Learning Resources + + + Liked BlazorHero? Star us on Github! + + + Onion Architecture In ASP.NET Core With CQRS – Detailed + + + Project Page + + + Quick Start Guide + + + Read The Guide + + + Support Me! + + + Blazor Hero + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.es.resx new file mode 100644 index 0000000..f5e12b4 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.es.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor para Principiantes – Iniciarse con Blazor + + + Blazor Hero es un template de Solución de Arquitectura todo-en-uno para Blazor Web-Assembly, hecho con la Librería de Componentes + + + Construir una Aplicación de Chat con Blazor, Identity y SignalR + + + Celebrando 1,500 Estrellas en Github! + + + + + + Autenticación Personalizada en Blazor WebAssembly – Detallado + + + Template de Arquitectura Limpia para Blazor Web-Assembly + + + Documentación - Pronto + + + Explorando la estructura de un Proyecto Blazor + + + Iniciarse + + + Repositorio en Github: No olvides dejar una estrella ;) + + + Aquí hay unos artículos que te ayudarán a iniciarte el Blazor. + + + ¿Cómo implementar un CRUD en Blazro usando Entity Framework Core? + + + Implementando un CRUD en Blazor usando la librería de componentes Mudblazor en .NET 5 + + + Links Importantes + + + En caso que tengas problemas para avanzar o tengas preguntas sobre la implementación, he compilado una Guía de Inicio Rápido para tu referencia. + + + Recursos para Aprendizaje + + + ¿Te gustó BlazorHero? Deja una estrella en Github! + + + Arquitectura Onion en ASP.NET Core con CQRS – Detalle + + + Página del proyecto + + + Guía de Inicio Rápido + + + Lee la guía + + + Apoyarme! + + + Blazor Hero + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.fr.resx new file mode 100644 index 0000000..0024b82 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.fr.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor For Beginners – Getting Started With Blazor + + + Blazor Hero est un modèle de solution propre et tout en un pour Blazor Web-Assembly, construit avec la bibliothèque de composants + + + Building A Chat Application With Blazor, Identity, And SignalR + + + Celebrating 1,500 Stars on Github! + + + + + + Custom Authentication In Blazor WebAssembly – Detailed + + + Modèle d'architecture propre pour Blasor Web-Assembly + + + Documentation - Coming Soon + + + Exploring Blazor Project Structure + + + Getting Started + + + Github Repository : Do Not Forget to Leave a Star ;) + + + Here are few articles that should help you get started with Blazor. + + + How To Implement Blazor CRUD Using Entity Framework Core? + + + Implementing Blazor CRUD Using Mudblazor Component Library In .NET 5 + + + Important Links + + + In case you are stuck anywhere or have any queries regarding this implementation, I have compiled a Quick Start Guide for you reference. + + + Learning Resources + + + Liked BlazorHero? Star us on Github! + + + Onion Architecture In ASP.NET Core With CQRS – Detailed + + + Project Page + + + Quick Start Guide + + + Read The Guide + + + Support Me! + + + Blazor Hero + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.id.resx new file mode 100644 index 0000000..32c38ef --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.id.resx @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor For Beginners – Getting Started With Blazor + + + Blazor Hero adalah sebuah Template Solusi Clean Architecture All-In-One Untuk Blazor Web-Assembly + + + Blazor Hero is an All-In-One Clean Architecture Solution Template For Blazor Web-Assembly built with + + + Building A Chat Application With Blazor, Identity, And SignalR + + + Celebrating 1,500 Stars on Github! + + + Pustaka Komponen + + + Component Library + + + Custom Authentication In Blazor WebAssembly – Detailed + + + Template Clean Architecture Untuk Blazor Web-Assembly + + + Documentation - Coming Soon + + + Exploring Blazor Project Structure + + + Getting Started + + + Github Repository : Do Not Forget to Leave a Star ;) + + + Here are few articles that should help you get started with Blazor. + + + How To Implement Blazor CRUD Using Entity Framework Core? + + + Implementing Blazor CRUD Using Mudblazor Component Library In .NET 5 + + + Important Links + + + In case you are stuck anywhere or have any queries regarding this implementation, I have compiled a Quick Start Guide for you reference. + + + Learning Resources + + + Liked BlazorHero? Star us on Github! + + + Onion Architecture In ASP.NET Core With CQRS – Detailed + + + Halaman Proyek + + + Quick Start Guide + + + Read The Guide + + + Dukung Saya! + + + Blazor Hero + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.it.resx new file mode 100644 index 0000000..e004f55 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.it.resx @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Descrizione + + + Blazor Hero + + + Libreria di compoenti + + + Supportami! + + + Blazor Hero + + + Blazor For Beginners – Getting Started With Blazor + + + Blazor Hero is an All-In-One Clean Architecture Solution Template For Blazor Web-Assembly built with + + + Building A Chat Application With Blazor, Identity, And SignalR + + + Celebrating 1,500 Stars on Github! + + + Component Library + + + Custom Authentication In Blazor WebAssembly – Detailed + + + Exploring Blazor Project Structure + + + Getting Started + + + Github Repository : Do Not Forget to Leave a Star ;) + + + Here are few articles that should help you get started with Blazor. + + + How To Implement Blazor CRUD Using Entity Framework Core? + + + Implementing Blazor CRUD Using Mudblazor Component Library In .NET 5 + + + Important Links + + + In case you are stuck anywhere or have any queries regarding this implementation, I have compiled a Quick Start Guide for you reference. + + + Learning Resources + + + Liked BlazorHero? Star us on Github! + + + Onion Architecture In ASP.NET Core With CQRS – Detailed + + + Quick Start Guide + + + Read The Guide + + + Documentation - Coming Soon + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.km.resx new file mode 100644 index 0000000..7fccc0b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.km.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ប្លេហ្សឺសម្រាប់ការចាប់ផ្តើម - ចាំផ្តើមជាមួយប្លេហ្សឺ + + + Blazor Hero is an All-In-One Clean Architecture Solution Template For Blazor Web-Assembly built with + + + Building A Chat Application With Blazor, Identity, And SignalR + + + Celebrating 1,500 Stars on Github! + + + Component Library + + + Custom Authentication In Blazor WebAssembly – Detailed + + + គំរូកម្មវិធីដែលអភិវឌ្ឍតាមបច្ចេកវិទ្យា Blazor Web-Assembly + + + ឯកសារណែនាំលម្អិត មកដល់ឆាប់ៗនេះ + + + គ្រោងថតរបស់គម្រោង + + + ចាប់ផ្តើម + + + Github Repository : Do Not Forget to Leave a Star ;) + + + Here are few articles that should help you get started with Blazor. + + + How To Implement Blazor CRUD Using Entity Framework Core? + + + Implementing Blazor CRUD Using Mudblazor Component Library In .NET 5 + + + Important Links + + + In case you are stuck anywhere or have any queries regarding this implementation, I have compiled a Quick Start Guide for you reference. + + + ធនធានសិក្សា + + + Liked BlazorHero? Star us on Github! + + + Onion Architecture In ASP.NET Core With CQRS – Detailed + + + ទំព័រគម្រោង + + + ការណែនាំសង្ខេប + + + អានការណែនា + + + គាំទ្រយើងខ្ញុំ! + + + ប្លេហ្សឺ ហេរ៉ូ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.nl.resx new file mode 100644 index 0000000..6ec8ae5 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.nl.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor voor beginners – Aan de slag met Blazor + + + Blazor Hero is een alles-in-één schone architectuuroplossing sjabloon voor Blazor web-assembly gebouwd met + + + Een chattoepassing bouwen met Blazor, Identity en SignalR + + + Inmiddels 1500 sterren op Github! + + + Componentbibliotheek + + + Aangepaste verificatie in Blazor WebAssembly - Gedetailleerd + + + Schone architectuursjabloon voor Blazor Web-Assembly + + + Documentatie - Binnenkort beschikbaar + + + Blazor-projectstructuur verkennen + + + Opstarten + + + Github Repository : Vergeet niet om een ster achter te laten ;) + + + Hier zijn enkele artikelen die u moeten helpen aan de slag te gaan met Blazor. + + + Hoe Blazor CRUD implementeren met Entity Framework Core? + + + Blazor CRUD implementeren met mudblazor-componentbibliotheek in .NET 5 + + + Belangrijke links + + + Verhoog dat u ergens vastzit of heb vragen over deze implementatie, ik heb een Quick Start Guide voor u samengesteld. + + + Leermiddelen + + + Vind je BlazorHero leuk? Geef een ster op Github! + + + Onion Architecture In ASP.NET Core Met CQRS – Gedetailleerd + + + Projectpagina + + + Snelstartgids + + + Lees de gids + + + Steun mij! + + + Blazor Held + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.ru.resx new file mode 100644 index 0000000..c1d6b11 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.ru.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor For Beginners – Getting Started With Blazor + + + Blazor Hero - это All-In-One шаблон решения с применением "чистой" архитектуры для Blazor Web-Assembly, построенный с помощью + + + Building A Chat Application With Blazor, Identity, And SignalR + + + Достигнуто 1,500 Звёзд на Github! + + + библиотеки компонентов + + + Custom Authentication In Blazor WebAssembly – Detailed + + + Шаблон "чистой" архитектуры для Blazor Web-Assembly + + + Документация - скоро появится + + + Exploring Blazor Project Structure + + + Начало работы + + + Репозиторий Github : не забудьте поставить звезду ;) + + + Вот несколько статей, которые должны помочь вам начать работу с Blazor. + + + How To Implement Blazor CRUD Using Entity Framework Core? + + + Implementing Blazor CRUD Using Mudblazor Component Library In .NET 5 + + + Важные ссылки + + + Если вы где-то застряли или у вас есть какие-либо вопросы относительно этой реализации, я составил для вас краткое руководство по началу работы. + + + Учебные ресурсы + + + Нравится BlazorHero? Поставьте звезду на Github! + + + Onion Architecture In ASP.NET Core With CQRS – Detailed + + + Страница проекта + + + Краткое руководство по началу работы + + + Прочитать руководство + + + Поддержать меня! + + + Blazor Hero + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.sv.resx new file mode 100644 index 0000000..a9bcdcc --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Home.sv.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor för nybörjare - Komma igång med Blazor + + + Blazor Hero är en allt-i-ett-ren mall för arkitekturlösningar för Blazor Web-Assembly byggd med + + + Bygga en Chattapplikation med Blazor, Identity och SignalR + + + Celebrating 1,500 Stars on Github! + + + Komponentbibliotek + + + Anpassad autentisering i Blazor WebAssembly - Detaljerad + + + Ren arkitekturmall för Blazor Web-Assembly + + + Documentation - Coming Soon + + + Utforska Blazor-projektets struktur + + + Komma igång + + + Github Repository : Glöm inte att lämna en stjärna ;) + + + Här är några artiklar som kan hjälpa dig att komma igång med Blazor. + + + Hur implementerar jag Blazor CRUD med Entity Framework Core? + + + Implementering av Blazor CRUD med Mudblazor Komponent Library i .NET 5 + + + Viktiga länkar + + + Öka att du har fastnat någonstans eller har några frågor angående denna implementering, jag har sammanställt en snabbstartsguide som referens. + + + Lärande resurser + + + Liked BlazorHero? Star us on Github! + + + Onion Architecture In ASP.NET Core With CQRS – Detaljerad + + + Projektsida + + + Snabbstartsguide + + + Läs guiden + + + Stöd Mig! + + + Blazor Hero + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.ar.resx new file mode 100644 index 0000000..4f13a27 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.ar.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + الوصول إلى الموارد هنا. + + + رهيبة بليزر + + + مكان رائع للتعلم والعثور على معلومات ومشاريع / أمثلة حول Blazor. + + + موارد + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.de.resx new file mode 100644 index 0000000..9000594 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.de.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Auf Ressourcen zugreifen. + + + Awesome Blazor + + + Großartige Seite zum Lernen von Blazor. Es gibt eine Vielzahl an Informationen, Projekten und Beispielen. + + + Ressourcen + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.en.resx new file mode 100644 index 0000000..4254cab --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.en.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Access Resources here. + + + Awesome Blazor + + + Great place to learn, find information and projects/examples about Blazor. + + + Resources + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.es.resx new file mode 100644 index 0000000..0f6b656 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.es.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acceder a los recursos aquí + + + Awesome Blazor + + + Estupendo lugar para aprender, buscar información y proyectos/ejemplos sobre Blazor. + + + Recursos + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.fr.resx new file mode 100644 index 0000000..fdccea8 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.fr.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Accédez aux ressouces ici. + + + Awesome Blazor + + + Bon endroit pour apprendre, trouver des informations et des projets / exemples avec Blazor. + + + Ressources + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.id.resx new file mode 100644 index 0000000..5233f41 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.id.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Akses Resources di sini. + + + Awesome Blazor + + + Tempat yang bagus untuk belajar, mencari informasi dan proyek/contoh tentang Blazor. + + + Resources + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.it.resx new file mode 100644 index 0000000..2d8f2f6 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.it.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Risorse + + + Ottimo posto per imparare, trovare informazioni e progetti/esempi su Blazor. + + + Eccezionale Blazor + + + Accedi alle risorse qui. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.km.resx new file mode 100644 index 0000000..fe1c3c3 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.km.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ចូលប្រើធនធាននៅទីនេះ + + + ធនធានប្លេហ្សឺមហាសាល + + + កន្លែងដ៏ល្អដើម្បីរៀនស្វែងរកព័ត៌មាននិងគម្រោង / ឧទាហរណ៍គំរូរបស់ប្លេហ្សឺ + + + ធនធាន + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.nl.resx new file mode 100644 index 0000000..a6e54ef --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.nl.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Hier kunt u bronnen openen. + + + Geweldige Blazor + + + Geweldige plek om te leren, informatie en projecten / voorbeelden over Blazor te vinden. + + + Bronnen + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.ru.resx new file mode 100644 index 0000000..c69e400 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.ru.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Доступ к ресурсам здесь. + + + Awesome Blazor + + + Отличное место для обучения, где можно найти информацию и проекты/примеры о Blazor. + + + Ресурсы + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.sv.resx new file mode 100644 index 0000000..163625f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Content/Resources.sv.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Få tillgång till resurser här. + + + Fantastisk Blazor + + + Bra ställe att lära sig, hitta information och projekt / exempel om Blazor. + + + Resurser + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.ar.resx new file mode 100644 index 0000000..a1e51f2 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.ar.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + الحساب + + + إدارة حسابك + + + الملف الشخصي + + + حماية + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.de.resx new file mode 100644 index 0000000..a309580 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.de.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Konto + + + Konto verwalten + + + Profil + + + Sicherheit + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.en.resx new file mode 100644 index 0000000..8153dbd --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.en.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Account + + + Manage your account + + + Profile + + + Security + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.es.resx new file mode 100644 index 0000000..d838676 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.es.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cuenta + + + Gestione su cuenta + + + Perfil + + + Seguridad + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.fr.resx new file mode 100644 index 0000000..3ff7ab8 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.fr.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Compte + + + Gérez votre compte + + + Profile + + + Sécurité + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.id.resx new file mode 100644 index 0000000..7ee6bd2 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.id.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Akun + + + Kelola akun anda + + + Profil + + + Keamanan + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.it.resx new file mode 100644 index 0000000..d4c0346 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.it.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Account + + + Gestisci il tuo account + + + Profilo + + + Sicurezza + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.km.resx new file mode 100644 index 0000000..d3e124c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.km.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + គណនី + + + គ្រប់គ្រង​គណនី​របស់​អ្នក + + + ប្រវត្តិរូប + + + សន្តិសុខ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.nl.resx new file mode 100644 index 0000000..4e3d049 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.nl.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Account + + + Uw account beheren + + + Profiel + + + Beveiliging + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.ru.resx new file mode 100644 index 0000000..5344d37 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.ru.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Аккаунт + + + Управление вашим аккаунтом + + + Профиль + + + Безопасность + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.sv.resx new file mode 100644 index 0000000..2bfbf5c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Account.sv.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Konto + + + Hantera ditt konto + + + Profil + + + Säkerhet + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.ar.resx new file mode 100644 index 0000000..549b9dc --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.ar.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + حذف صورة + + + حذف الصورة + + + هل تريد حذف صورة ملف تعريف {0} + + + بريد الالكتروني + + + الاسم الأول + + + الكنية + + + رقم الهاتف + + + الملف الشخصي + + + تفاصيل الملف الشخصي + + + تمت إضافة صورة الملف الشخصي. + + + تم حذف صورة الملف الشخصي. + + + حفظ التغييرات + + + تحميل الصور + + + تم تحديث ملفك الشخصي. الرجاء تسجيل الدخول للمتابعة. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.de.resx new file mode 100644 index 0000000..badb9b7 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.de.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bild löschen + + + Bild löschen + + + Möchtest du das Profilbild von {0} löschen + + + E-Mail + + + Vorname + + + Nachname + + + Telefon + + + Profil + + + Profildetails + + + Profilbild hinzugefügt. + + + Profilbild gelöscht. + + + Änderungen speichern + + + Bild hochladen + + + Profil aktualisiert. Zum Fortfahren anmelden. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.en.resx new file mode 100644 index 0000000..708594b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.en.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Delete Image + + + Delete Picture + + + Do you want to delete the profile picture of {0} + + + Email + + + First Name + + + Last Name + + + Phone Number + + + Profile + + + Profile Details + + + Profile picture added. + + + Profile picture deleted. + + + Save Changes + + + Upload Image + + + Your Profile has been updated. Please Login to Continue. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.es.resx new file mode 100644 index 0000000..add91bb --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.es.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Borrar Imagen + + + Borrar Imagen + + + ¿Quiere borrar la imagen de perfil de {0} + + + Correo + + + Nombre + + + Apellido + + + Teléfono + + + Perfil + + + Detalle del perfil + + + Imagen de Perfil agregada. + + + Imagen de Perfil borrada. + + + Guardar cambios + + + Cargar Imagen + + + Tu perfil fue actualizado, por favor ingrese para continuar. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.fr.resx new file mode 100644 index 0000000..9dd3d5c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.fr.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Supprimer image + + + Supprimer photo + + + Voulez-vous supprimer la photo de profil de {0} + + + Courriel + + + Prénom + + + Nom + + + Numéro de téléphone + + + Profil + + + Détails du profil + + + Photo de profil ajouté. + + + Photo de profil supprimée. + + + Sauvagarder les changements + + + Téléverser une image + + + Votre profil a été mis à jour. Merci de vous reconnecter pour continuer. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.id.resx new file mode 100644 index 0000000..238596e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.id.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Hapus Gambar + + + Hapus Gambar + + + Do you want to delete the profile picture of {0} + + + Email + + + Nama Depan + + + Nama Belakang + + + Nomor Telepon + + + Profil + + + Detail Profil + + + Profile picture added. + + + Profile picture deleted. + + + Simpan Perubahan + + + Unggah Gambar + + + Profil Anda telah diperbarui. Login untuk Melanjutkan. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.it.resx new file mode 100644 index 0000000..3848468 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.it.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Elimina Immagine + + + Elimina Immagine + + + Do you want to delete the profile picture of {0} + + + Email + + + Nome + + + Cognome + + + Telefono + + + Profilo + + + Dettagli profilo + + + Profile picture added. + + + Profile picture deleted. + + + Salvare le modifiche + + + Carica immagine + + + Il tuo profilo è stato aggiornato. Accedere per continuare. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.km.resx new file mode 100644 index 0000000..56fd8a9 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.km.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + លុបរូបភាព + + + លុបរូបភាព + + + តើអ្នកចង់លុបរូបថតប្រូហ្វាល់នៃ {0} + + + អ៊ីមែល + + + នាមខ្លួន + + + នាមត្រកូល + + + លេខទូរស័ព្ទ + + + ប្រវត្តិរូប + + + ព័ត៌មានលម្អិតប្រវត្តិរូប + + + រូបថតប្រូហ្វាល់បានបន្ថែម + + + រូបថតប្រូហ្វាល់បានលុប + + + រក្សាទុកការផ្លាស់ប្តូរ + + + ផ្ទុកឡើងរូបភាព + + + ពត៌មានរបស់អ្នកត្រូវបានធ្វើបច្ចុប្បន្នភាព។ សូមចូលដើម្បីបន្ត។ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.nl.resx new file mode 100644 index 0000000..faba084 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.nl.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Afbeelding verwijderen + + + Wilt u de profielfoto van {0} verwijderen? + + + Email + + + Voornaam + + + Achternaam + + + Telefoonnummer + + + Profiel + + + Profielgegevens + + + Profielfoto toegevoegd. + + + Profielfoto verwijderd. + + + Wijzigingen opslaan + + + Uw profiel is bijgewerkt. Log in om door te gaan. + + + Afbeelding verwijderen + + + Afbeelding uploaden + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.ru.resx new file mode 100644 index 0000000..c08082a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.ru.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Удалить изображение + + + Вы действительно хотите удалить изображение профиля {0} + + + Email + + + Имя + + + Фамилия + + + Номер телефона + + + Профиль + + + Детали профиля + + + Изображение профиля добавлено. + + + Изображение профиля удалено. + + + Сохранить изменения + + + Загрузить изображение + + + Ваш профиль был обновлён. Пожалуйста, авторизуйтесь, чтобы продолжить. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.sv.resx new file mode 100644 index 0000000..48cf3c5 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Profile.sv.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Radera Bild + + + Radera Bild + + + Do you want to delete the profile picture of {0} + + + E-post + + + Förnamn + + + Efternamn + + + Telefonnummer + + + Profil + + + Profil Detaljer + + + Profile picture added. + + + Profile picture deleted. + + + Spara Ändringar + + + Ladda upp bild + + + Din profil har uppdaterats. Var vänlig logga in för att fortsätta. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.ar.resx new file mode 100644 index 0000000..8e0d14b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.ar.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + تغيير كلمة المرور + + + كلمة المرور الحالي + + + كلمة سر خاطئة. + + + كلمه السر + + + تم تغيير كلمة السر! + + + تأكيد كلمة المرور + + + مطلوب تأكيد كلمة المرور! + + + كلمة المرور مطلوبة! + + + يجب ألا يقل طول كلمة المرور عن 8 + + + يجب أن تحتوي كلمة المرور على حرف كبير واحد على الأقل + + + يجب أن تحتوي كلمة المرور على رقم واحد على الأقل + + + يجب أن تحتوي كلمة المرور على حرف صغير واحد على الأقل + + + كلمات المرور غير متطابقة + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.de.resx new file mode 100644 index 0000000..593ce75 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.de.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Passwort ändern + + + Aktuelles Passwort + + + Falsches Passwort. + + + Passwort + + + Passwort geändert! + + + Passwortwiederholung + + + Passwortwiederholung wird benötigt! + + + Passwort wird benötigt! + + + Passwort muss mindestens 8 Zeichen lang sein + + + Passwort muss mindestens einen Großbuchstaben enthalten + + + Passwort muss mindestens eine Zahl enthalten + + + Passwort muss mindestens einen Kleinbuchstaben enthalten + + + Passwörter stimmen nicht überein. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.en.resx new file mode 100644 index 0000000..9de3a3e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.en.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Change Password + + + Current Password + + + Incorrect Password. + + + Password + + + Password Changed! + + + Password Confirmation + + + Password Confirmation is required! + + + Password is required! + + + Password must be at least of length 8 + + + Password must contain at least one capital letter + + + Password must contain at least one digit + + + Password must contain at least one lowercase letter + + + Passwords don't match + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.es.resx new file mode 100644 index 0000000..998fab6 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.es.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cambiar contraseña + + + Contraseña actual + + + Contraseña + + + Confirmación de contraseña + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.fr.resx new file mode 100644 index 0000000..b98c7ae --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.fr.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Changer le mot de passe + + + Mot de passe actuel + + + Mot de passe incorrect. + + + Mot de passe + + + Mot de passe changé ! + + + Mot de passe confirmé ! + + + Confirmation du mot de passe requise ! + + + Mot de passe requis ! + + + Le mot de passe doit au moins contenir 8 caractères ! + + + Le mot de passe doit au moins contenir une lettre majuscule + + + Le mot de passe doit au moins contenir un chiffre + + + Le mot de passe doit au moins contenir une minuscule + + + Les mots de passes de correspondent pas + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.id.resx new file mode 100644 index 0000000..6f68328 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.id.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ubah sandi + + + Sandi saat Ini + + + Sandi salah. + + + Sandi + + + Sandi diperbarui! + + + Konfirmasi sandi + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.it.resx new file mode 100644 index 0000000..787c422 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.it.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cambia password + + + Password corrente + + + Password non corretta. + + + Password + + + Password cambiata! + + + Conferma password + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.km.resx new file mode 100644 index 0000000..9f41488 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.km.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ផ្លាស់ប្តូរពាក្យសម្ងាត់ + + + លេខសំងាត់​បច្ចុប្បន្ន + + + ពាក្យសម្ងាត់ + + + ការ​បញ្ជាក់​ពាក្យ​សម្ងាត់ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.nl.resx new file mode 100644 index 0000000..54116f3 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.nl.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Wachtwoord wijzigen + + + Huidig wachtwoord + + + Wachtwoord + + + Wachtwoordbevestiging + + + Onjuist wachtwoord. + + + Wachtwoord gewijzigd! + + + Lösenordsbekräftelse krävs! + + + Wachtwoord is vereist! + + + Wachtwoord moet uit minimaal 8 karakters bestaan! + + + Wachtwoord moet uit minimaal 1 hoofdletter bestaan! + + + Wachtwoord moet uit minimaal 1 nummer! + + + Wachtwoord moet uit minimaal 1 kleine letter! + + + Wachtwoorden komen niet overeen! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.ru.resx new file mode 100644 index 0000000..6240d95 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.ru.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Изменить пароль + + + Текущий пароль + + + Неверный пароль. + + + Пароль + + + Пароль изменён! + + + Подтверждение пароля + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.sv.resx new file mode 100644 index 0000000..1fa3c42 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Account/Security.sv.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ändra lösenord + + + Nuvarande lösenord + + + Fel lösenord. + + + Lösenord + + + Lösenord Ändrat! + + + Lösenordsbekräftelse + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.ar.resx new file mode 100644 index 0000000..aa9eed6 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.ar.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + المستخدم نشط؟ + + + هل تريد تأكيد البريد الإلكتروني تلقائيًا؟ + + + إلغاء + + + تأكيد كلمة المرور + + + بريد الالكتروني + + + الاسم الأول + + + الكنية + + + كلمه السر + + + رقم الهاتف + + + الملف الشخصي + + + تفاصيل الملف الشخصي + + + تسجيل + + + تسجيل المستخدم + + + حفظ التغييرات + + + اسم االمستخدم + + + مستخدم مسجل! + + + مستخدم مسجل. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.de.resx new file mode 100644 index 0000000..06149d5 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.de.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Benutzer aktivieren? + + + E-Mail automatisch bestätigen? + + + Abbrechen + + + Passwort wiederholen + + + E-Mail + + + Vorname + + + Nachname + + + Passwort + + + Telefon + + + Profil + + + Profildetails + + + Registrieren + + + Benutzer registrieren + + + Änderungen speichern + + + Benutzername + + + Benutzer registriert! + + + Benutzer registriert. Eine Bestätigungsemail wurde an die angegebene E-Mail-Adresse versendet. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.en.resx new file mode 100644 index 0000000..02e1e86 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.en.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Activate User? + + + Auto Confirm Email? + + + Cancel + + + Confirm Password + + + Email + + + First Name + + + Last Name + + + Password + + + Phone Number + + + Profile + + + Profile Details + + + Register + + + Register User + + + Save Changes + + + User Name + + + User Registered! + + + User Registered. Confirmation Mail has been delivered to the Mailbox. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.es.resx new file mode 100644 index 0000000..ff8e8ee --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.es.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ¿Activar usuario? + + + ¿Autoconfirmar correo? + + + Cancelar + + + Confirmar contraseña + + + Correo + + + Nombre + + + Apellido + + + Contraseña + + + Teléfono + + + Perfil + + + Detalle del perfil + + + Registrar + + + Usuario registrado + + + Guardar cambios + + + Usuario + + + Usuario Registrado! + + + Usuario Registrado. Un correo de confirmación fue enviado a su casilla de correo. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.fr.resx new file mode 100644 index 0000000..3c2d06a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.fr.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Utilisateur actif ? + + + Confirmer automatiquement le courriel ? + + + Annuler + + + Confirmer le mot de passe + + + Courriel + + + Prénom + + + Nom + + + Mot de passe + + + Numéro de téléphone + + + Profil + + + Détails du profil + + + Inscrire + + + Inscrire l'utilisateur + + + Sauvegarder les changements. + + + Nom d'utilisateur + + + Utilisateur enregistré. + + + Utilisateur enregistré. Un courriel de confirmation a lui été envoyé. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.id.resx new file mode 100644 index 0000000..b26268a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.id.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktifkan Pengguna? + + + Konfirmasi Email Otomatis? + + + Batal + + + Konfirmasi Sandi + + + Email + + + Nama Depan + + + Nama Belakang + + + Sandi + + + Nomor Telepon + + + Profil + + + Detail Profil + + + Daftar + + + Daftar Pengguna + + + Simpan Perubahan + + + User Name + + + Pengguna Terdaftar! + + + Pengguna Terdaftar. Email konfirmasi telah dikirim ke email Anda. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.it.resx new file mode 100644 index 0000000..2999209 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.it.resx @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Auto conferma E-Mail? + + + Annulla + + + Conferma password + + + Email + + + Nome + + + Cognome + + + Password + + + Telefono + + + Profilo + + + Dettagli profilo + + + Registrati + + + Registra utente + + + Salvare le modifiche + + + Nome utente + + + Utente registrato! + + + Utente registrato. Una mail di conferma è stata inviata alla vostra casella E-Mail. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.km.resx new file mode 100644 index 0000000..821eb89 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.km.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ធ្វើឱ្យអ្នកប្រើប្រាស់សកម្ម? + + + បញ្ជាក់អ៊ីមែលដោយស្វ័យប្រវត្តិ? + + + បោះបង់ + + + បញ្ជាក់ពាក្យសម្ងាត់ + + + អ៊ីមែល + + + នាមខ្លួន + + + នាមត្រកូល + + + ពាក្យសម្ងាត់ + + + លេខទូរស័ព្ទ + + + ប្រវត្តិរូប + + + ប្រវត្តិរូបលម្អិត + + + ចុះឈ្មោះ + + + ចុះឈ្មោះអ្នកប្រើប្រាស់ + + + រក្សាការកែប្រែ + + + ឈ្មោះអ្នកប្រើប្រាស់ + + + អ្នកប្រើប្រាស់ត្រូវបានចុះឈ្មោះរួចរាល់ + + + អ្នកប្រើប្រាស់ត្រូវបានចុះឈ្មោះរួចរាល់ សារអ៊ីម៉ែលបញ្ជាក់នឹងត្រូវផ្ញើទៅកាន់ប្រអប់សាររបស់អ្នក! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.nl.resx new file mode 100644 index 0000000..39a5449 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.nl.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Gebruiker activeren? + + + E-mail automatisch bevestigen? + + + Annuleren + + + Wachtwoord bevestigen + + + Email + + + Voornaam + + + Achternaam + + + Wachtwoord + + + Telefoonnummer + + + Profiel + + + Profielgegevens + + + Registreren + + + Gebruiker registreren + + + Wijzigingen opslaan + + + Gebruikersnaam + + + Gebruiker geregistreerd! + + + Geregistreerde gebruiker. Bevestigingsmail is afgeleverd bij de mailbox. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.ru.resx new file mode 100644 index 0000000..15c69df --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.ru.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Активировать пользователя? + + + Подтвердить email автоматически? + + + Отмена + + + Подтверждение пароля + + + Email + + + Имя + + + Фамилия + + + Пароль + + + Номер телефона + + + Профиль + + + Детали профиля + + + Зарегистрировать + + + Регистрация пользователя + + + Сохранить изменения + + + Username + + + Пользователь зарегистрирован + + + Пользователь зарегистрирован. Письмо для подтверждения будет отправлено по почте. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.sv.resx new file mode 100644 index 0000000..949f8d8 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RegisterUserModal.sv.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktivera användare? + + + Bekräfta e-post automatiskt? + + + Avbryt + + + Bekräfta lösenord + + + E-post + + + Förnamn + + + Efternamn + + + Lösenord + + + Telefonnummer + + + Profil + + + Profil Detaljer + + + Registrera + + + Registrera användare + + + Spara ändringar + + + Användarnamn + + + Användare Registrerad! + + + Användare registrerad. Bekräftelsemeddelande har skickats till brevlådan. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.ar.resx new file mode 100644 index 0000000..cfc5c47 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.ar.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + تأكيد كلمة المرور + + + بريد الالكتروني + + + أدخل البريد الإلكتروني لإعادة تعيين كلمة المرور + + + كلمه السر + + + إعادة تعيين كلمة المرور + + + لم يتم العثور على الرمز! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.de.resx new file mode 100644 index 0000000..00eb773 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.de.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Passwort bestätigen + + + E-Mail + + + E-Mail-Adresse eingeben um, das Passwort zurückzusetzen + + + Passwort + + + Passwort zurücksetzen + + + Token nicht gefunden! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.en.resx new file mode 100644 index 0000000..4e4a724 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.en.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Confirm Password + + + E-mail + + + Enter email for password reset + + + Password + + + Reset password + + + Token Not Found! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.es.resx new file mode 100644 index 0000000..cf79b0c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.es.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Confirmar Contraseña + + + Correo + + + Ingrese correo para blanquear contraseña + + + Contraseña + + + Blanquear Contraseña + + + Token no encontrado! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.fr.resx new file mode 100644 index 0000000..a38eed5 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.fr.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Confirmer le mot de passe + + + Courriel + + + Entrez le courriel pour la réinitialisation du mot de passe + + + Mot de passe + + + Réinitialiser le mot de passe + + + Jeton introuvable ! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.id.resx new file mode 100644 index 0000000..4e4a724 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.id.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Confirm Password + + + E-mail + + + Enter email for password reset + + + Password + + + Reset password + + + Token Not Found! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.it.resx new file mode 100644 index 0000000..4e4a724 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.it.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Confirm Password + + + E-mail + + + Enter email for password reset + + + Password + + + Reset password + + + Token Not Found! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.km.resx new file mode 100644 index 0000000..895f21c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.km.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + លេខកូដសម្ងាត់បញ្ជាក់ + + + អ៊ីំម៉ែល + + + បញ្ចូលអ៊ីម៉ែលដើម្បីកំណត់លេខកូដសម្ងាត់ឡើងវិញ + + + លេខកូដសម្ងាត់ + + + កំណត់លេខកូដសម្ងាត់ឡើងវិញ + + + ធូឃីនរកមិនឃើញ! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.nl.resx new file mode 100644 index 0000000..d1617f7 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.nl.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Wachtwoord bevestigen + + + E-mail + + + Voer uw E-mail in voor het opnieuw instellen van het wachtwoord! + + + Wachtwoord + + + Wachtwoord opnieuw instellen + + + Token niet gevonden! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.ru.resx new file mode 100644 index 0000000..47208bc --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.ru.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Подтверждение пароля + + + E-mail + + + Введите email для сброса ппароля + + + Пароль + + + Сбросить пароль + + + Токен не найден! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.sv.resx new file mode 100644 index 0000000..4e4a724 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Reset.sv.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Confirm Password + + + E-mail + + + Enter email for password reset + + + Password + + + Reset password + + + Token Not Found! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.ar.resx new file mode 100644 index 0000000..ea2c146 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.ar.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أضف دورًا + + + إلغاء + + + وصف + + + معرف الدور + + + اسم الدور + + + حفظ الدور + + + تحديث الدور + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.de.resx new file mode 100644 index 0000000..3ad22b6 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.de.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Rolle hinzufügen + + + Abbrechen + + + Beschreibung + + + Rollen ID + + + Rollenname + + + Rolle speichern + + + Rolle aktualisieren + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.en.resx new file mode 100644 index 0000000..a9dfc58 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.en.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Role + + + Cancel + + + Description + + + Role ID + + + Role Name + + + Save Role + + + Update Role + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.es.resx new file mode 100644 index 0000000..059eae4 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.es.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Agregar Rol + + + Cancelar + + + Descripción + + + ID de Rol + + + Nombre de Rol + + + Guardar + + + Actualizar + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.fr.resx new file mode 100644 index 0000000..88f6a63 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.fr.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ajouter un rôle + + + Annuler + + + Description + + + Identifiant du rôle + + + Nom du rôle + + + Sauvegarder le rôle + + + Mettre à jour le rôle + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.id.resx new file mode 100644 index 0000000..ba2c181 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.id.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tambah Wewenang + + + Batal + + + Description + + + Wewenang berhasil dibuat! + + + ID Wewenang + + + Nama Wewenang + + + Simpan Wewenang + + + Perbarui Wewenang + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.it.resx new file mode 100644 index 0000000..eba449c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.it.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Attivare l'utente? + + + Annulla + + + Description + + + Id ruolo + + + Nome ruolo + + + Salvare ruolo + + + Aggiorna ruolo + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.km.resx new file mode 100644 index 0000000..eaa3005 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.km.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + បន្ថែមតួនាទី + + + បោះបង់ + + + ពិពណ៌នា + + + លេខសម្គាល់តួនាទី + + + ឈ្មោះតួនាទី + + + រក្សាទុកតួនាទី + + + ធ្វើបច្ចុប្បន្នភាពតួនាទី + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.nl.resx new file mode 100644 index 0000000..26ddbae --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.nl.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Rol toevoegen + + + Annuleren + + + Beschrijving + + + Rol-ID + + + Rolnaam + + + Rol opslaan + + + Rol bijwerken + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.ru.resx new file mode 100644 index 0000000..a66eebf --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.ru.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Добавить роль + + + Отмена + + + Описание + + + ID роли + + + Имя роли + + + Сохранить роль + + + Обновить роль + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.sv.resx new file mode 100644 index 0000000..d01cb2e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/RoleModal.sv.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Lägg till roll + + + Avbryt + + + Description + + + Roll ID + + + Roll Namn + + + Spara Roll + + + Uppdatera Roll + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.ar.resx new file mode 100644 index 0000000..d40cc37 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.ar.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + كل الأذونات + + + تطبيق + + + يحدها + + + كثيف + + + وصف + + + هنا يمكنك ترك تعليق لهذا الإذن للدور الحالي + + + إدارة الإذن + + + إدارة أذونات {0} {1} + + + اسم الإذن + + + ابحث عن أذونات + + + حالة + + + مخطط + + + نوع + + + تحديث أذونات الدور + + + سيتم حفظها فقط عند تحديد الإذن + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.de.resx new file mode 100644 index 0000000..bc9a1e6 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.de.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Alle Berechtigungen + + + Anwenden + + + Gerahmt + + + Schmal + + + Beschreibung + + + Hier kann ein Kommentar für diese Berechtigung der aktuellen Rolle hinterlassen werden + + + Berechtigungen verwalten + + + Verwalte {0} Berechtigungen von {1} + + + Berechtigungsname + + + Nach Berechtigungen suchen + + + Status + + + Gebändert + + + Typ + + + Rollenberechtigungen verwalten + + + Wird nur gespeichert wenn Berechtigung ausgewählt + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.en.resx new file mode 100644 index 0000000..83f81ed --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.en.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + All Permissions + + + Apply + + + Bordered + + + Dense + + + Description + + + Here you can leave a comment for this permission for the current role + + + Manage Permission + + + Manage {0} {1}'s Permissions + + + Permission Name + + + Search For Permissions + + + Status + + + Striped + + + Type + + + Update Role Permissions + + + Will be saved only when selected Permission + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.es.resx new file mode 100644 index 0000000..358154c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.es.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Todos los Permisos + + + Aplicar + + + Bordeado + + + Denso + + + Descripción + + + Aquí puede dejar un comentario para este permiso para el rol actual + + + Administrar Permisos + + + Administrar los permisos de {0} {1} + + + Nombre del Permiso + + + Buscar Permisos + + + Estado + + + Rayado + + + Tipo + + + Actualizar los Permisos del Rol + + + Será guardado únicamente cuando se seleccione Permisos + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.fr.resx new file mode 100644 index 0000000..8b5380b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.fr.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Toutes les permissions + + + Appliquer + + + Avec bordures + + + Dense + + + Description + + + Vous pouvez laisser ici un commentaire pour expliquer la permission de ce rôle. + + + Gérer la permission + + + Gérer les permissions du rôle {0} {1} + + + Nom de la permission + + + Rechercher une permission + + + Statut + + + Rayé + + + Type + + + Mettre à jour les permissions du rôle + + + Va être sauvegardé seulement si la permission est sélectionnée + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.id.resx new file mode 100644 index 0000000..6698c6a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.id.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + All Permissions + + + Apply + + + Description + + + Here you can leave a comment for this permission for the current role + + + Pengaturan Izin + + + Pengaturan {0} {1} Izin + + + Nama Wewenang + + + Status + + + Tipe + + + Perbarui Izin Wewenang + + + Will be saved only when selected Permission + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.it.resx new file mode 100644 index 0000000..56b3c0d --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.it.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tutti le autorizzazioni + + + Applica + + + Descrizione + + + Qui puoi lasciare un commento per questa autorizzazione per il ruolo corrente + + + Gestisci autorizzazione + + + Gestisci {0} {1} Autorizzazioni + + + Nome autorizzazioni + + + Status + + + Questa è una visualizzazione solo amministratore + + + Salva autorizzazioni + + + Aggiorna le autorizzazioni del ruolo + + + Saranno salvati solo i permessi selezionati + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.km.resx new file mode 100644 index 0000000..10fa383 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.km.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + សិទ្ធិទាំងអស់ + + + អនុវត្ត + + + ពិពណ៌នា + + + ទីនេះអ្នកអាចដាក់កំណត់សម្គាល់សិទ្ធិសម្រាប់តួនាទីមួយនេះបាន + + + គ្រង់គ្រងសិទ្ធិ + + + គ្រប់គ្រង {0} {1} សិទ្ធិ + + + ឈ្មោះសិទ្ធិ + + + ស្ថានភាព + + + ប្រភេទ + + + បច្ចុប្បន្នភាពសិទ្ធិរបស់តួនាទី + + + ត្រូវបានរក្សាទុកចំពោះសិទ្ធិដែលបានជ្រើសរើសតែប៉ុណ្ណោះ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.nl.resx new file mode 100644 index 0000000..ac114dc --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.nl.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Alle machtigingen + + + Toepassen + + + Grenst aan + + + Dicht + + + Beschrijving + + + Hier kunt u een opmerking achterlaten voor deze machtiging voor de huidige rol + + + Machtiging beheren + + + Machtigingen van {0} {1} beheren + + + Naam machtiging + + + Zoeken naar machtigingen + + + Status + + + Gestreept + + + Type + + + Rolmachtigingen bijwerken + + + Wordt alleen opgeslagen wanneer deze optie Is geselecteerd + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.ru.resx new file mode 100644 index 0000000..752fc9c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.ru.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Все права + + + Применить + + + Обрамлённый + + + Компактный + + + Описание + + + Здесь вы можете оставить комментарий к этому разрешению для текущей роли + + + Управление правами + + + Управление правами {0} {1} + + + Имя права + + + Найти права + + + Статус + + + Чередующийся + + + Тип + + + Обновить права роли + + + Будет сохранено только при выбранном разрешении + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.sv.resx new file mode 100644 index 0000000..f45df6a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/RolePermissions.sv.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + All Permissions + + + Apply + + + Description + + + Here you can leave a comment for this permission for the current role + + + Hantera Behörighet + + + Hantera {0} {1} Behörigheter + + + Permission Name + + + Status + + + Typ + + + Uppdatera Rollbehörigheter + + + Will be saved only when selected Permission + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.ar.resx new file mode 100644 index 0000000..fd3def1 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.ar.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أجراءات + + + يحدها + + + إنشاء + + + حذف + + + هل تريد حذف الدور بالمعرف {0}؟ + + + كثيف + + + وصف + + + يحرر + + + المعرف + + + إدارة الإذن + + + إدارة الأدوار. + + + لا توجد إجراءات مسموح بها + + + إعادة تحميل + + + دور + + + الأدوار + + + البحث عن الأدوار ... + + + مخطط + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.de.resx new file mode 100644 index 0000000..dab2a04 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.de.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktionen + + + Gerahmt + + + Hinzufügen + + + Löschen + + + Möchtest du die Rolle mit der Id {0} löschen? + + + Schmal + + + Beschreibung + + + Bearbeiten + + + Id + + + Berechtigungen verwalten + + + Rollen verwalten. + + + Keine Aktionen erlaubt + + + Neu laden + + + Rolle + + + Rollen + + + Nach Rollen suchen... + + + Gebändert + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.en.resx new file mode 100644 index 0000000..0fa1138 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.en.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Bordered + + + Create + + + Delete + + + Do you want to delete the role with Id {0}? + + + Dense + + + Description + + + Edit + + + Id + + + Manage Permission + + + Manage Roles. + + + No Allowed Actions + + + Reload + + + Role + + + Roles + + + Search for Roles... + + + Striped + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.es.resx new file mode 100644 index 0000000..1d2ab77 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.es.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acciones + + + Bordeado + + + Crear + + + Borrar + + + ¿Deseas borrar el rol con el Id {0}? + + + Denso + + + Descripción + + + Editar + + + Id + + + Administrar Permisos + + + Gestionar Roles + + + Acciones no Permitidas + + + Recargar + + + Rol + + + Roles + + + Buscar Roles + + + Rayado + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.fr.resx new file mode 100644 index 0000000..24b39cc --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.fr.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Avec bordures + + + Créer + + + Supprimer + + + Voulez-vous supprimer le rôle d'identifiant {0}? + + + Dense + + + Description + + + Éditer + + + Identifiant + + + Gérer la permission + + + Gérer les rôles + + + Aucune action autorisée + + + Recharger + + + Rôle + + + Rôles + + + Rechercher des rôles + + + Rayé + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.id.resx new file mode 100644 index 0000000..7c09d81 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.id.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tindakan + + + Tambah + + + Hapus + + + Hapus wewenang dengan Id {0}? + + + Description + + + Sunting + + + Id + + + Atur Perizinan + + + Atur Wewenang. + + + No Allowed Actions + + + Muat Ulang + + + Wewenang + + + Wewenang + + + Cari Wewenang... + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.it.resx new file mode 100644 index 0000000..fbd73a3 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.it.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Azioni + + + Crea + + + Elimina + + + Vuoi eliminare il ruolo con Id {0}? + + + Description + + + Modifica + + + Id + + + Gestisci autorizzazione + + + Gestisci ruoli. + + + No Allowed Actions + + + Ricarica + + + Ruolo + + + Ruoli + + + Ricerca ruoli... + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.km.resx new file mode 100644 index 0000000..eca7c51 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.km.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + មុខងារ + + + បង្កើត + + + លុប + + + តើអ្នកចង់លុបតួនាទីជាមួយលេខសម្គាល់ {0} ទេ? + + + ពិពណ៌នា + + + កែប្រែ + + + លេខកូដ + + + គ្រប់គ្រងតួនាទី + + + សកម្មភាពមិនត្រូវបានអនុញ្ញាត្ត + + + ផ្ទុកឡើងវិញ + + + តួនាទី + + + ស្វែងរកតួនាទី ... + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.nl.resx new file mode 100644 index 0000000..e64ccda --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.nl.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acties + + + Aanmaken + + + Verwijderen + + + Wilt u de rol verwijderen met Id {0}? + + + Beschrijving + + + Bewerken + + + Id + + + Rollen beheren. + + + Geen toegestane acties + + + Herladen + + + Rollen + + + Rollen zoeken... + + + Grenst aan + + + Dicht + + + Machtiging beheren + + + Rol + + + Gestreept + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.ru.resx new file mode 100644 index 0000000..283844d --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.ru.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Действия + + + Обрамлённый + + + Создать + + + Удалить + + + Вы действительно хотите удалить роль с Id {0}? + + + Компактный + + + Описание + + + Редактировать + + + Id + + + Управление правами + + + Управление ролями. + + + Нет доступных действий + + + Перезагрузить + + + Роль + + + Роли + + + Поиск ролей... + + + Чередующийся + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.sv.resx new file mode 100644 index 0000000..0b9f79f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Roles/Roles.sv.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Åtgärder + + + Skapa + + + Radera + + + Vill du ta bort rollen med Id {0}? + + + Description + + + Redigera + + + Id + + + Hantera Behörighet + + + Hantera Roller. + + + No Allowed Actions + + + Ladda Om + + + Roll + + + Roller + + + Sök efter Roll... + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.ar.resx new file mode 100644 index 0000000..9a71a7f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.ar.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + نشيط؟ + + + إعدادات المسؤول. + + + البريد الإلكتروني + + + الاسم الأول + + + الكنية + + + رقم الهاتف + + + الملف الشخصي + + + حساب عام + + + حفظ التغييرات + + + هذا هو العرض المسؤول فقط. + + + تم تحديث حالة المستخدم. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.de.resx new file mode 100644 index 0000000..7ae4716 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.de.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktiv? + + + Administrator Einstellungen + + + E-Mail + + + Vorname + + + Nachname + + + Telefon + + + Profil + + + Öffentliches Profil + + + Änderungen speichern + + + Diese Ansicht ist nur für den Administrator. + + + Benutzerstatus aktualisiert. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.en.resx new file mode 100644 index 0000000..f98093b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.en.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Active? + + + Administrator Settings. + + + E-Mail + + + First Name + + + Last Name + + + Phone Number + + + Profile + + + Public Profile + + + Save Changes + + + This is an Administrator Only View. + + + Updated User Status. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.es.resx new file mode 100644 index 0000000..6acdc56 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.es.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ¿Activo? + + + Configuraciones de Administrador + + + Correo + + + Nombre + + + Apellido + + + Teléfono + + + Perfil + + + Perfil Público + + + Guardar cambios + + + Esta es una vista solo de Administrador + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.fr.resx new file mode 100644 index 0000000..4ce1ad8 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.fr.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actif ? + + + Paramètres pour les administateurs. + + + Courriel + + + Prénom + + + Nom + + + Numéro de téléphone + + + Profil + + + Profil public + + + Sauvegarder les changements + + + Ceci est visible uniquement par les administrateurs. + + + Statut de l'utilisateur mis à jour. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.id.resx new file mode 100644 index 0000000..56bde38 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.id.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktif? + + + Pengaturan Administrator. + + + E-Mail + + + Nama Depan + + + Nama Belakang + + + Nomor Telepon + + + Profil + + + Profil Publik + + + Simpan Perubahan + + + Ini adalah tampilan khusus Administrator. + + + Perbarui Status Pengguna. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.it.resx new file mode 100644 index 0000000..3bea79d --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.it.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Attivato ? + + + Impostazioni amministratore. + + + E-Mail + + + Nome + + + Cognome + + + Telefono + + + Profilo + + + Profilo pubblico + + + Salvare le modifiche + + + Questa è una visualizzazione solo amministratore. + + + Aggiorna status utente. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.km.resx new file mode 100644 index 0000000..fb3e505 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.km.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + សកម្ម? + + + ការកំណត់អ្នកគ្រប់គ្រង + + + អ៊ីមែល + + + នាមខ្លួន + + + នាមត្រកូល + + + លេខទូរស័ព្ទ + + + ប្រវត្តិរូប + + + ប្រវត្តិរូបសាធារណៈ + + + រក្សាទុកការផ្លាស់ប្តូរ + + + ផ្ទាំងសម្រាប់តែអ្នកប្រើប្រាស់មានសិទ្ធិជារដ្ឋបាលប្រព័ន្ធទេ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.nl.resx new file mode 100644 index 0000000..17c4cd3 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.nl.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actief? + + + Beheerdersinstellingen + + + E-mail + + + Voornaam + + + Achternaam + + + Telefoonnummer + + + Profiel + + + Openbaar profiel + + + Wijzigingen opslaan + + + Dit is alleen een weergave voor beheerders. + + + Bijgewerkte gebruikersstatus. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.ru.resx new file mode 100644 index 0000000..ca0349c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.ru.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Активный? + + + Настройки администратора. + + + E-Mail + + + Имя + + + Фамилия + + + Номер телефона + + + Профиль + + + Публичные данные профиля + + + Сохранить изменения + + + Эта стрица доступна только администраторам. + + + Статус пользователя обновлён. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.sv.resx new file mode 100644 index 0000000..ad47191 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserProfile.sv.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktiv? + + + Administratörsinställningar. + + + E-post + + + Förnamn + + + Efternamn + + + Telefonnummer + + + Profil + + + Offentlig profil + + + Spara ändringar + + + Detta är enbart en administratörsvy. + + + Uppdaterad användarstatus. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.ar.resx new file mode 100644 index 0000000..74663cc --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.ar.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bordered + + + Dense + + + Manage {0} {1}'s Roles + + + Role Name + + + Roles Updated! + + + Search For User Roles + + + Status + + + Striped + + + Update User Roles + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.de.resx new file mode 100644 index 0000000..cd38ab3 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.de.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Gerahmt + + + Schmal + + + Rollen von {0} {1}'s verwalten + + + Rollenname + + + Rollen aktualisiert! + + + Nach Benutzerrollen suchen + + + Status + + + Gebändert + + + Nutzerrolle aktualisieren + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.en.resx new file mode 100644 index 0000000..74663cc --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.en.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bordered + + + Dense + + + Manage {0} {1}'s Roles + + + Role Name + + + Roles Updated! + + + Search For User Roles + + + Status + + + Striped + + + Update User Roles + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.es.resx new file mode 100644 index 0000000..f4b8b24 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.es.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bordeado + + + Denso + + + Descripción + + + Administrar Roles de {0} {1} + + + Nombre del Rol + + + Roles actualizados! + + + Buscar por Rol de Usuario + + + Estado + + + Rayado + + + Actualizar Roles de Usuario + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.fr.resx new file mode 100644 index 0000000..e56749a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.fr.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Avec bordures + + + Dense + + + Gérer les rôles de {0} {1} + + + Nom du rôle + + + Rôles mis à jour + + + Rechercher parmis les rôles de l'utilisateur + + + Statut + + + Rayé + + + Mettre à jour les rôles de l'utilisateur + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.id.resx new file mode 100644 index 0000000..5015c9e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.id.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Pengaturan {0} {1} Wewenang + + + Nama Wewenang + + + Wewenang Diperbarui! + + + Status + + + Perbarui Wewenang Pengguna + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.it.resx new file mode 100644 index 0000000..ac5b7c0 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.it.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Manage {0} {1}'s Roles + + + Nome ruolo + + + Ruoli aggiornati! + + + Stato + + + Aggiorna ruoli utente + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.km.resx new file mode 100644 index 0000000..706e0a6 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.km.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Manage {0} {1}'s Roles + + + ឈ្មោះតួនាទី + + + តួនាទីត្រូវបានធ្វើបច្ចុប្បន្នភាព! + + + ស្ថានភាព + + + បច្ចុប្បន្នភាពតួនាទីរបស់អ្នកប្រើប្រាស់ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.nl.resx new file mode 100644 index 0000000..e515e39 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.nl.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Rollen van {0} {1} beheren + + + Rolnaam + + + Rollen bijgewerkt! + + + Status + + + Gebruikersrollen bijwerken + + + Grenst aan + + + Dicht + + + Zoeken naar gebruikersrollen + + + Gestreept + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.ru.resx new file mode 100644 index 0000000..a934c03 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.ru.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Обрамлённый + + + Компактный + + + Управление Ролями {0} {1} + + + Имя роли + + + Роли обновлены! + + + Поиск ролей пользователя + + + Статус + + + Чередующийся + + + Обновить роли пользователя + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.sv.resx new file mode 100644 index 0000000..4963a5f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/UserRoles.sv.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Hantera {0} {1} Roller + + + Rollnamn + + + Roller uppdaterade! + + + Status + + + Uppdatera användarroller + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.ar.resx new file mode 100644 index 0000000..09b0624 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.ar.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أجراءات + + + نشيط + + + يحدها + + + إنشاء + + + كثيف + + + بريد الالكتروني + + + تأكيد البريد الإلكتروني + + + تصدير + + + تم تصدير المستخدمين الذين تمت تصفيتهم + + + الاسم الأول + + + الكنية + + + إدارة الأدوار + + + ادارة المستخدمين + + + لا توجد إجراءات مسموح بها + + + غير مسموح. + + + رقم الهاتف + + + تسجيل مستخدم جديد + + + إعادة تحميل + + + البحث عن المستخدمين + + + مخطط + + + اسم االمستخدم + + + المستخدمون + + + تصدير المستخدمين + + + عرض الصفحة الشخصية + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.de.resx new file mode 100644 index 0000000..48abf2c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.de.resx @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktionen + + + Aktiv + + + Gerahmt + + + Passwort bestätigen + + + Hinzufügen + + + Schmal + + + E-Mail + + + E-Mail bestätigt + + + Export + + + Gefilterte Benutzer exportiert + + + Vorname + + + Nachname + + + Rollen verwalten + + + Nutzer verwalten + + + Keine Aktionen erlaubt + + + Nicht erlaubt. + + + Passwort + + + Telefonnummer + + + Neuen Nutzer anlegen + + + Neu laden + + + Nach Benutzern suchen + + + Gebändert + + + Benutzername + + + Nutzer + + + Benutzer exportiert + + + Profil anzeigen + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.en.resx new file mode 100644 index 0000000..2251438 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.en.resx @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Active + + + Bordered + + + Confirm Password + + + Create + + + Dense + + + Email + + + Email Confirmation + + + Export + + + Filtered Users exported + + + First Name + + + Last Name + + + Manage Roles + + + Manage Users + + + No Allowed Actions + + + Not Allowed. + + + Password + + + Phone Number + + + Register New User + + + Reload + + + Search For Users + + + Striped + + + User Name + + + Users + + + Users exported + + + View Profile + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.es.resx new file mode 100644 index 0000000..9a9793a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.es.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acciones + + + Activo + + + Bordeado + + + Crear + + + Denso + + + Correo + + + Confirmación de correo + + + Exportar + + + Usuarios Filtrados exportados + + + Nombre + + + Apellido + + + Gestionar Roles + + + Gestionar Usuarios + + + Acciones no Permitidas + + + No Permitido + + + Teléfono + + + Nuevo usuario + + + Recargar + + + Buscar usuarios + + + Rayado + + + Nombre de Usuario + + + Usuarios + + + Usuarios exportados + + + Ver perfil + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.fr.resx new file mode 100644 index 0000000..771937f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.fr.resx @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Actif + + + Créer + + + Courriel + + + Confirmation du courriel + + + Exporter + + + Utilisateurs filtrés exportés + + + Prénom + + + Nom + + + Gérer les rôles + + + Gérer les utilisateurs + + + Aucune action autorisée + + + Enregistrer un nouvel utilisateur + + + Recharger + + + Rechercher des utilisateurs + + + Utilisateurs + + + Utilisateurs exportés + + + Voir le profil + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.id.resx new file mode 100644 index 0000000..4b1f5dd --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.id.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tindakan + + + Aktif + + + Tambah Pengguna + + + Email + + + Konfirmasi Email + + + Export + + + Filtered Users exported + + + Nama Depan + + + Nama Belakang + + + Atur Wewenang + + + Atur Pengguna + + + No Allowed Actions + + + Tidak Diizinkan. + + + Daftar Pengguna Baru + + + Muat Ulang + + + Cari Pengguna + + + Pengguna + + + Users exported + + + Lihat Profil + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.it.resx new file mode 100644 index 0000000..7d50b0c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.it.resx @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Azioni + + + Attiva + + + Conferma Password + + + Crea + + + Email + + + Conferma E-Mail + + + Export + + + Filtered Users exported + + + Nome + + + Cognome + + + Gestisci ruoli + + + Gestisci utenti + + + No Allowed Actions + + + Non autorizzato. + + + Password + + + Numero di telefono + + + Numero di telefono + + + Registra nuovo utente + + + Ricarica + + + Ricerca utenti + + + Nome utente + + + Nome utente + + + Utenti + + + Users exported + + + Vedi profilo + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.km.resx new file mode 100644 index 0000000..7e26532 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.km.resx @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + មុខងារ + + + សកម្ម + + + បង្កើត + + + អ៊ីម៉ែល + + + អ៊ីម៉ែលបញ្ជាក់ + + + នាំចេញ + + + ច្រោះអ្នកប្រើប្រាស់បាននាំចេញ + + + នាមខ្លួន + + + នាមត្រកូល + + + កំណត់សិទ្ធិអ្នកប្រើប្រាស់ + + + កំណត់អ្នកប្រើប្រាស់ + + + សកម្មភាពមិនអនុញ្ញាត្ត + + + ចុះឈ្មោះអ្នកប្រើប្រាស់ថ្មី + + + ផ្ទុកឡើងវិញ + + + ស្វែងរកអ្នកប្រើប្រាស់ + + + អ្នកប្រើប្រាស់ + + + អ្នកប្រើប្រាស់បាននាំចេញ + + + បង្ហាញព័ត៌មានផ្ទាល់ខ្លួន + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.nl.resx new file mode 100644 index 0000000..80ee914 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.nl.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acties + + + Actief + + + Aanmaken + + + Email + + + Bevestiging per e-mail + + + Exporteren + + + Gefilterde gebruikers geëxporteerd + + + Voornaam + + + Achternaam + + + Rollen beheren + + + Gebruikers beheren + + + Geen toegestane acties + + + Nieuwe gebruiker registreren + + + Herladen + + + Gebruikers zoeken + + + Gebruikers + + + Gebruikers geëxporteerd + + + Profiel weergeven + + + Grenst aan + + + Dicht + + + Niet toegestaan. + + + Telefoonnummer + + + Gestreept + + + Gebruikersnaam + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.ru.resx new file mode 100644 index 0000000..9b83555 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.ru.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Действия + + + Активный + + + Обрамлённый + + + Создать + + + Компактный + + + Email + + + Email подтверждён + + + Экспорт в Excel + + + Отфильтрованные пользователи экспортированы + + + Имя + + + Фамилия + + + Управление ролями + + + Управление пользователями + + + Нет доступных действий + + + Не разрешено. + + + Номер телефона + + + Зарегистрировать нового пользователя + + + Перезагрузить + + + Поиск пользователя... + + + Чередующийся + + + UserName + + + Пользователи + + + Пользователи экспортированы + + + Посмотреть профиль + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.sv.resx new file mode 100644 index 0000000..bdc6cd6 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Identity/Users/Users.sv.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Åtgärder + + + Aktiv + + + Skapa + + + E-post + + + E-post Bekräftelse + + + Export + + + Filtered Users exported + + + Förnamn + + + Efternamn + + + Hantera Roller + + + Hantera Användare + + + No Allowed Actions + + + Inte Tillåtet. + + + Registrera ny användare + + + Ladda om + + + Sök efter användare + + + Användare + + + Users exported + + + Visa Profil + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Index.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Index.de.resx new file mode 100644 index 0000000..e998e26 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Index.de.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor WASM Vorlage + + + Erstellt mit dem Besten von + + + Kompatibel mit + + + Komponentenbibliothek + + + Falls du irgendwo steckenbleiben solltest, oder Fragen zu dieser Implementierung hast, habe ich eine Schnellstartanleitung für dich erstellt. + + + Anleitung lesen + + + Version 1.0 + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Index.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Index.en.resx new file mode 100644 index 0000000..14ddac7 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Index.en.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor WASM Boilerplate + + + Built with the goodness of + + + Compatible with + + + Component Library + + + In case you are stuck anywhere or have any queries regarding this implementation, I have compiled a Quick Start Guide for you reference. + + + Read The Guide + + + Version 1.0 + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Index.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Index.it.resx new file mode 100644 index 0000000..cb76ac0 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Index.it.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor WASM Boilerplate + + + Sviluppato con l'ultilizzo di componenti della libreria + + + Compatibile con + + + Component Library + + + Nel caso in cui tu sia bloccato ovunque o hai domande riguardanti questa implementazione, ho compilato una guida rapida per il tuo riferimento. + + + GUIDA + + + Versione 1.0 + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.ar.resx new file mode 100644 index 0000000..c32c8b3 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.ar.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أضف مستند + + + الغاء + + + وصف + + + نوع المستند + + + تنزيل + + + رقم المعرف + + + عام؟ + + + حفظ + + + عنوان + + + تحديث + + + تحديث المستند + + + رفع + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.de.resx new file mode 100644 index 0000000..5c863a4 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.de.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Dokument hinzufügen + + + Abbrechen + + + Beschreibung + + + Dokumenttyp + + + Herunterladen + + + Id + + + Öffentlich? + + + Speichern + + + Titel + + + Aktualisieren + + + Dokument aktualisieren + + + Hochladen + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.en.resx new file mode 100644 index 0000000..87f6df1 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.en.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Document + + + Cancel + + + Description + + + Document Type + + + Download + + + Id + + + Is Public? + + + Save + + + Title + + + Update + + + Update Document + + + Upload + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.es.resx new file mode 100644 index 0000000..dc71795 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.es.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Agregar Documento + + + Cancelar + + + Descripción + + + Tipo de Documento + + + Descargar + + + Id + + + ¿Es Público? + + + Guardar + + + Título + + + Actualizar + + + Actualizar Documento + + + Subir + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.fr.resx new file mode 100644 index 0000000..2e1cc02 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.fr.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ajouter un document + + + Annuler + + + Description + + + Type du document + + + Télécharger + + + Identifiant + + + Est public ? + + + Sauvegarder + + + Titre + + + Mettre à jour + + + Mettre à jour le document + + + Téléverser + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.id.resx new file mode 100644 index 0000000..afa6f30 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.id.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tambah Dokumen + + + Batal + + + Deskripsi + + + Document Type + + + Unduh + + + Id + + + Dokumen Publik? + + + Simpan + + + Judul + + + Perbarui + + + Perbarui Dokumen + + + Unggah + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.it.resx new file mode 100644 index 0000000..6c14e3b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.it.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aggiungi documento + + + Annulla + + + Descrizione + + + Document Type + + + Download + + + Id + + + È pubblico? + + + Salva + + + Titolo + + + Aggiorna + + + Aggiorna Documento + + + Carica + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.km.resx new file mode 100644 index 0000000..0797109 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.km.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + បន្ថែមឯកសារ + + + បោះបង់ + + + ការពិពណ៌នា + + + ប្រភេទឯកសារ + + + ទាញយក + + + លេខកូដសម្គាល់ + + + ជាសាធារណះ? + + + រក្សាទុក + + + ចំណងជើង + + + បច្ចុប្បន្នភាព + + + បច្ចុប្បន្នភាពឯកសារ + + + ផ្ទុកឡើង + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.nl.resx new file mode 100644 index 0000000..3da7669 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.nl.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Document toevoegen + + + Annuleren + + + Beschrijving + + + Documenttype + + + Downloaden + + + Id + + + Is het openbaar? + + + Opslaan + + + Titel + + + Update + + + Document bijwerken + + + Uploaden + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.ru.resx new file mode 100644 index 0000000..4da98f0 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.ru.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Добавить документ + + + Отмена + + + Описание + + + Тип документа + + + Скачать + + + Id + + + Публичный? + + + Сохранить + + + Заголовок + + + Обновить + + + Обновить документ + + + Загрузить + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.sv.resx new file mode 100644 index 0000000..e23d6b5 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentModal.sv.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Lägg till dokument + + + Avbryt + + + Beskrivning + + + Document Type + + + Ladda ner + + + Id + + + Är Offentlig? + + + Spara + + + Rubrik + + + Uppdatera + + + Uppdatera Dokument + + + Ladda Upp + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.ar.resx new file mode 100644 index 0000000..909c248 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.ar.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Document Type + + + الغاء + + + وصف + + + رقم المعرف + + + اسم + + + حثظ + + + تحديث + + + تحديث موع المستند + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.de.resx new file mode 100644 index 0000000..4b9bf26 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.de.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Dokumenttyp hinzufügen + + + Abbrechen + + + Beschreibung + + + Id + + + Name + + + Speichern + + + Aktualisieren + + + Dokumenttyp aktualisieren + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.en.resx new file mode 100644 index 0000000..8b60e1c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.en.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Document Type + + + Cancel + + + Description + + + Id + + + Name + + + Save + + + Update + + + Update Document Type + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.es.resx new file mode 100644 index 0000000..647a528 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.es.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Agregar Tipo de Documento + + + Cancelar + + + Descripción + + + Id + + + Nombre + + + Guardar + + + Actualizar + + + Actualizar Tipo de Documento + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.fr.resx new file mode 100644 index 0000000..a0b980d --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.fr.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ajouter un type de document + + + Annuler + + + Description + + + Identifiant + + + Nom + + + Sauvegarder + + + Mettre à jour + + + Mettre à jour le type de document + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.km.resx new file mode 100644 index 0000000..bd07f65 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.km.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + បន្ថែមប្រភេទឯកសារ + + + បោះបង់ + + + ពិពណ៌នា + + + លេខកូដ + + + ឈ្មោះ + + + រក្សាទុក + + + បច្ចុប្បន្នភាព + + + បច្ចុប្បន្នភាពប្រភេទឯកសារ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.nl.resx new file mode 100644 index 0000000..cb353bf --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.nl.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Documenttype toevoegen + + + Annuleren + + + Beschrijving + + + Id + + + Naam + + + Opslaan + + + Update + + + Documenttype bijwerken + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.ru.resx new file mode 100644 index 0000000..0f7290e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.ru.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Добавить тип документа + + + Отмена + + + Описание + + + Id + + + Наименование + + + Сохранить + + + Обновить + + + Обновить тип документа + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.ar.resx new file mode 100644 index 0000000..ae36281 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.ar.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أجراءات + + + يحدها + + + تصفح المستندات المتاحة. + + + إنشاء + + + تاريخ الإنشاء + + + حذف + + + حذف المحتوى + + + كثيف + + + وصف + + + متجر المستندات + + + نوع الوثيقة + + + تحميل + + + يحرر + + + المعرف + + + عام + + + إدارة السمات الموسعة + + + لا توجد إجراءات مسموح بها + + + صاحب + + + إعادة تحميل + + + بحث + + + مخطط + + + عنوان + + + أنت + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.de.resx new file mode 100644 index 0000000..d7f094f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.de.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktionen + + + Gerahmt + + + Verfügbare Dokumente durchsuchen. + + + Erstellen + + + Erstellungsdatum + + + Löschen + + + Inhalt löschen + + + Schmal + + + Beschreibung + + + Dokumentenspeicher + + + Dokumenttyp + + + Herunterladen + + + Bearbeiten + + + Id + + + Öffentlich + + + Erweiterte Attribute verwalten + + + Keine Aktionen erlaubt + + + Eigentümer + + + Neu laden + + + Suche + + + Gebändert + + + Titel + + + Du + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.en.resx new file mode 100644 index 0000000..68cb0bb --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.en.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Bordered + + + Browse Available Documents. + + + Create + + + Date Created + + + Delete + + + Delete Content + + + Dense + + + Description + + + Document Store + + + Document Type + + + Download + + + Edit + + + Id + + + Is Public + + + Manage Extended Attributes + + + No Allowed Actions + + + Owner + + + Reload + + + Search + + + Striped + + + Title + + + you + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.es.resx new file mode 100644 index 0000000..74654a0 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.es.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acciones + + + Bordeado + + + Navegar Documentos Disponibles. + + + Crear + + + Fecha de Creación + + + Borrar + + + ¿Desea eliminar el registro? + + + Denso + + + Descripción + + + Almacén de Documentos + + + Tipo de Documento + + + Descarga + + + Editar + + + Id + + + Es Público + + + Administrar Atributos Extendidos + + + Acciones no Permitidas + + + Propietario + + + Recargar + + + Buscar + + + Rayado + + + Título + + + Ud. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.fr.resx new file mode 100644 index 0000000..5247805 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.fr.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Avec bordures + + + Parcourir les documents disponibles. + + + Créer + + + Date de création + + + Supprimer + + + Supprimer l'élément + + + Dense + + + Description + + + Stockage de documents + + + Type de document + + + Télécharger + + + Éditer + + + Identifiant + + + Est public + + + Gérer les attributs étendus + + + Aucune action autorisée + + + Propriétaire + + + Recharger + + + Rechercher + + + Rayé + + + Titre + + + vous + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.id.resx new file mode 100644 index 0000000..4586f7d --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.id.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tindakan + + + Telusuri Dokumen yang Tersedia. + + + Tambah Dokumen + + + Tanggal Dibuat + + + Hapus + + + Delete Content + + + Deskripsi + + + Penyimpanan Dokumen + + + Document Type + + + Unduh + + + Sunting + + + Id + + + Dokumen Publik + + + Manage Extended Attributes + + + No Allowed Actions + + + Pemilik + + + Muat Ulang + + + Cari + + + Judul + + + you + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.it.resx new file mode 100644 index 0000000..51932c2 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.it.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Azioni + + + Sfoglia i documenti disponibili. + + + Crea + + + Data di Creazione + + + Elimina + + + Delete Content + + + Descrizione + + + Archivio documenti + + + Document Type + + + Download + + + Modifica + + + Id + + + E' Pubblico + + + Manage Extended Attributes + + + No Allowed Actions + + + Proprietario + + + Ricarica + + + Cerca + + + Titolo + + + you + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.km.resx new file mode 100644 index 0000000..d1d4b53 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.km.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + សកម្មភាព + + + រកមើលឯកសារមានទាំងអស់ + + + បង្កើត + + + កាលបរិឆ្ឆេទបង្កើត + + + លុប + + + អត្ថបទត្រូវបានលុប + + + ការពិពណ៌នា + + + តំបន់រក្សាទុកឯកសារ + + + ប្រភេទឯកសារ + + + ទាញយក + + + កែប្រែ + + + លេខកូដសម្ងាត់ + + + ធ្វើអោយជាសាធារណះ + + + គ្រប់គ្រង ជួរឈរបន្ថែម + + + សកម្មភាពមិនបានអនុញ្ញាត្ត + + + ម្ខាស់ + + + ផ្ទុកឡើងវិញ + + + ស្វែងរក + + + ចំណងជើង + + + អ្នក + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.nl.resx new file mode 100644 index 0000000..5f962f4 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.nl.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acties + + + Grenst aan + + + Blader door beschikbare documenten. + + + Aanmaken + + + Datum gemaakt + + + Verwijderen + + + Inhoud verwijderen + + + Dicht + + + Beschrijving + + + Documentopslag + + + Documenttype + + + Downloaden + + + Bewerken + + + Id + + + Is openbaar + + + Uitgebreide kenmerken beheren + + + Geen toegestane acties + + + Eigenaar + + + Herladen + + + Zoeken + + + Gestreept + + + Titel + + + jij + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.ru.resx new file mode 100644 index 0000000..6f251e4 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.ru.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Действия + + + Обрамлённый + + + Обзор доступных документов. + + + Создать + + + Дата создания + + + Удалить + + + Удалить контент + + + Компактный + + + Описание + + + Хранилище документов + + + Тип документа + + + Скачать + + + Редактировать + + + Id + + + Публичный + + + Управление атрибутами + + + Нет доступных действий + + + Владелец + + + Перезагрузить + + + Поиск документов + + + Чередующийся + + + Заголовок + + + Вы + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.sv.resx new file mode 100644 index 0000000..869cdea --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentStore.sv.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Åtgärder + + + Bläddra i tillgängliga dokument. + + + Skapa + + + Skapat datum + + + Radera + + + Delete Content + + + Beskrivning + + + Dokument Förvaring + + + Document Type + + + Ladda Ner + + + Ändra + + + Id + + + Är Offentlig + + + Manage Extended Attributes + + + No Allowed Actions + + + Ägare + + + Ladda Om + + + Sök + + + Rubrik + + + you + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.ar.resx new file mode 100644 index 0000000..d317b38 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.ar.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أجراءات + + + يحدها + + + إنشاء + + + حذف + + + حذف المحتوى + + + كثيف + + + وصف + + + أنواع المستندات + + + أنواع المستندات التي تم تصديرها + + + يحرر + + + يصدر + + + تم تصدير أنواع المستندات التي تمت تصفيتها + + + المعرف + + + إدارة أنواع المستندات. + + + اسم + + + لا توجد إجراءات مسموح بها + + + إعادة تحميل + + + ابحث عن أنواع المستندات + + + مخطط + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.de.resx new file mode 100644 index 0000000..930df1f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.de.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktionen + + + Gerahmt + + + Erstellen + + + Löschen + + + Inhalt löschen + + + Schmal + + + Beschreibung + + + Dokumenttypen + + + Dokumenttypen exportiert + + + Bearbeiten + + + Export + + + Gefilterte Dokumenttypen exportiert + + + Id + + + Dokumenttypen verwalten. + + + Name + + + Keine Aktionen erlaubt + + + Neu laden + + + Nach Dokumenttypen suchen + + + Gebändert + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.en.resx new file mode 100644 index 0000000..ba73b34 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.en.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Bordered + + + Create + + + Delete + + + Delete Content + + + Dense + + + Description + + + Document Types + + + Document Types exported + + + Edit + + + Export + + + Filtered Document Types exported + + + Id + + + Manage Document Types. + + + Name + + + No Allowed Actions + + + Reload + + + Search for Document Types + + + Striped + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.es.resx new file mode 100644 index 0000000..527d617 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.es.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acciones + + + Bordeado + + + Crear + + + Borrar + + + ¿Desea borrar el registro? + + + Denso + + + Descripción + + + Tipos de Documentos + + + Tipos de Documentos exportados + + + Editar + + + Exportar + + + Tipos de Documentos Filtrados exportados + + + Id + + + Administar Tipos de Documentos. + + + Nombre + + + Acciones no Permitidas + + + Recargar + + + Buscar Tipos de Documentos + + + Rayado + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.fr.resx new file mode 100644 index 0000000..19ca0fb --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.fr.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Avec bordures + + + Création + + + Suppression + + + Supprimer l'élément + + + Dense + + + Description + + + Types de documents + + + Types de documents exportés + + + Éditer + + + Exporter + + + Types de documents filtrés exportés + + + Identifiants + + + Gérer les types de documents + + + Nom + + + Aucune action autorisée + + + Recharger + + + Rechercher parmis les types de documents + + + Rayé + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.km.resx new file mode 100644 index 0000000..2ab117c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.km.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + សកម្មភាព + + + ព្រុំប្រទល់ + + + បង្កើត + + + លុប + + + លុបខ្លឹមសារ + + + ពង្រួម + + + ពិពណ៌នា + + + ប្រភេទឯកសារ + + + ប្រភេទឯកសារនាំចេញ + + + កែប្រែ + + + នាំចេញ + + + ច្រោះប្រភេទឯកសារនាំចេញ + + + លេខកូដ + + + គ្រប់គ្រងប្រភេទឯកសារ + + + ឈ្មោះ + + + សកម្មភាពមិនអនុញ្ញាត្ត + + + ផ្ទុកឡើងវិញ + + + ស្វែងរកប្រភេទឯកសារ + + + ឆ្លាស់ពណ៌ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.nl.resx new file mode 100644 index 0000000..65e8af1 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.nl.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acties + + + Grenst aan + + + Aanmaken + + + Verwijderen + + + Inhoud verwijderen + + + Dicht + + + Beschrijving + + + Documenttypen + + + Geëxporteerde documenttypen + + + Bewerken + + + Exporteren + + + Gefilterde documenttypen geëxporteerd + + + Id + + + Documenttypen beheren. + + + Naam + + + Geen toegestane acties + + + Herladen + + + Zoeken naar documenttypen + + + Gestreept + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.ru.resx new file mode 100644 index 0000000..1d369bb --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Misc/DocumentTypes.ru.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Действия + + + Обрамлённый + + + Создать + + + Удалить + + + Удалить контент + + + Компактный + + + Описание + + + Типы документов + + + Типы документов экспортированы + + + Редактировать + + + Экспорт в Excel + + + Отфильтрованные типы документов экспортированы + + + Id + + + Управление типами документов. + + + Наименование + + + Нет доступных действий + + + Перезагрузить + + + Поиск типов документов... + + + Чередующийся + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Multitenancy/Tenants.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Multitenancy/Tenants.de.resx new file mode 100644 index 0000000..f0beede --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Multitenancy/Tenants.de.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktiv + + + E-Mail-Adresse des Administrators + + + Name + + + Gültig bis + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Multitenancy/Tenants.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Multitenancy/Tenants.en.resx new file mode 100644 index 0000000..383c6a7 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Multitenancy/Tenants.en.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Active + + + Admin Email + + + Name + + + Valid Upto + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Multitenancy/Tenants.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Multitenancy/Tenants.it.resx new file mode 100644 index 0000000..356ba8f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Multitenancy/Tenants.it.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Attivo + + + Email (Adm) + + + Nome + + + Valito fino a + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Multitenancy/UpgradeSubscriptionModal.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Multitenancy/UpgradeSubscriptionModal.de.resx new file mode 100644 index 0000000..75eeef9 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Multitenancy/UpgradeSubscriptionModal.de.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Abbrechen + + + Aktuelles Ablaufdatum + + + Neues Ablaufdatum + + + Aktualisieren + + + Abonnement aktualisieren + + + Abonnement aktualisiert. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Multitenancy/UpgradeSubscriptionModal.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Multitenancy/UpgradeSubscriptionModal.en.resx new file mode 100644 index 0000000..c788ea0 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Multitenancy/UpgradeSubscriptionModal.en.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancel + + + Current Expiry Date + + + New Expiry Date + + + Upgrade + + + Upgrade Subscription + + + Upgraded Subscription. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Multitenancy/UpgradeSubscriptionModal.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Multitenancy/UpgradeSubscriptionModal.it.resx new file mode 100644 index 0000000..87d54c5 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Multitenancy/UpgradeSubscriptionModal.it.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annulla + + + Data di scadenza + + + Nuova data di scadenza + + + Aggiornamento + + + Aggiorna Subscription + + + Subscription Aggiornata. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.ar.resx new file mode 100644 index 0000000..2bacb36 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.ar.resx @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + مسارات المراجعة + + + تم تصدير مسارات التدقيق + + + يحدها + + + الغاء + + + مسح + + + تتأثر الأعمدة + + + تاريخ + + + النطاق الزمني للبحث + + + كثيف + + + تفاصيل معرف الممر + + + تصدير إلى Excel + + + تم تصدير مسارات التدقيق المصفاة + + + إخفاء + + + المعرف + + + محلي + + + قيم جديدة + + + موافق + + + المفتاح الأساسي + + + ابحث عن مسارات + + + ابحث في القيم الجديدة + + + ابحث في القيم القديمة + + + ابحث في القيم القديمة + + + عرض + + + مخطط + + + اسم الجدول + + + تفاضيل + + + نوع + + + التوقيت العالمي + + + أنشطتك الأخيرة. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.de.resx new file mode 100644 index 0000000..f16282e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.de.resx @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Prüfpfade + + + Prüfpfade aktualisiert + + + Gerahmt + + + Abbrechen + + + Leeren + + + Betroffene Spalten + + + Datum + + + Zeitraum für Suche + + + Schmal + + + Details zur Prüfpfad-Id + + + Zu Excel exportieren + + + Gefilterte Prüfpfade exported + + + Verstecken + + + Id + + + Lokal + + + Neue Werte + + + Ok + + + Alte Werte + + + Primärschlüssekl + + + Nach Prüfpfaden suchen + + + In neuen Werten suchen + + + In alten Werten suchen + + + Anzeigen + + + Gebändert + + + Tabellenname + + + Prüfpfad-Details + + + Typ + + + UTC + + + Deine letzten Aktivitäten. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.en.resx new file mode 100644 index 0000000..c6b6a01 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.en.resx @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Audit Trails + + + Audit Trails exported + + + Bordered + + + Cancel + + + Clear + + + Columns Affected + + + Date + + + Date Range For Searching + + + Dense + + + Details for Trail ID + + + Export To Excel + + + Filtered Audit Trails exported + + + Hide + + + Id + + + Local + + + New Values + + + Ok + + + Old Values + + + Primary Key + + + Search for Trails + + + Search in New Values + + + Search in Old Values + + + Show + + + Striped + + + Table Name + + + Trail Details + + + Type + + + UTC + + + Your Recent Activities. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.es.resx new file mode 100644 index 0000000..a363e1c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.es.resx @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Registro de Auditoría + + + Registro de Auditoría exportado + + + Bordeado + + + Cancelar + + + Limpiar + + + Columnas Afectadas + + + Fecha + + + Rango de Fechas para Búsqueda + + + Denso + + + Detalles para Registro ID + + + Exportar a Excel + + + Registros de Auditoría Filtrados exportados + + + Ocultar + + + Id + + + Local + + + Nuevos Valores + + + Ok + + + Valores Anteriores + + + Clave Primaria + + + Buscar Registros + + + Buscar en Valores Nuevos + + + Buscar en Valores Anteriores + + + Mostrar + + + Rayado + + + Nombre de Tabla + + + Detalle de Registro + + + Tipo + + + UTC + + + Su actividad reciente. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.fr.resx new file mode 100644 index 0000000..f2029e1 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.fr.resx @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Pistes d'audit + + + Pistes d'audit exportées + + + Avec bordures + + + Annulées + + + Effacer + + + Colonnes affectées + + + Date + + + Plage de dates pour la recherche + + + Dense + + + Détail de la piste d'identifiant + + + Exporter vers Excel + + + Pistes d'audit filtrés exportées + + + Cacher + + + Identifiant + + + Local + + + Nouvelles valeurs + + + OK + + + Anciennes valeurs + + + Clé primaire + + + Rechercher des pistes + + + Rechercher parmis les nouvelles valeurs + + + Rechercher parmis les anciennes valeurs + + + Afficher + + + Rayé + + + Nom de la table + + + Détails de la piste + + + Type + + + UTC + + + Activité récente + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.it.resx new file mode 100644 index 0000000..c3eab91 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.it.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Registro Attività + + + Audit Trails exported + + + Colonne Interessate + + + Data + + + Dettagli per ID Attività + + + Esporta in Excel + + + Filtered Audit Trails exported + + + Nascondi + + + Id + + + Locale + + + Nuovi valori + + + Vecchi valori + + + Chiave Primaria + + + Cerca Attività + + + Mostra + + + Nome Tabella + + + Dettagli Attività + + + Tipo + + + UTC + + + Le tue Attività Recenti. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.km.resx new file mode 100644 index 0000000..d3a1341 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.km.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + កំណត់ត្រាប្រព័ន្ធ + + + កំណត់ត្រាប្រព័ន្ធ នាំចេញ + + + ជួរឈរដែលបានកែប្រែ + + + កាលបរិច្ឆេទ + + + កំណត់ត្រាលម្អិតសម្រាប់កំណត់ត្រាដែលមានលេខសម្ងាល់ + + + បម្លែងជា​ Excel + + + ច្រោះកំណត់ត្រាប្រព័ន្ធនាំចេញ + + + បិទ + + + លេខកូដសម្ងាល់ + + + ខាងក្នុង + + + តម្លៃថ្មី + + + តម្លៃចាស់ + + + លេខសម្គាល់គោល + + + ស្វែងរកកំណត់ត្រាប្រព័ន្ធ + + + បង្ហាញ + + + ឈ្មោះតារាង + + + កំណត់ត្រាលម្អិត + + + ប្រភេទ + + + ម៉ោងសកល + + + សកម្មភាពរបស់អ្នកចុងក្រោយ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.nl.resx new file mode 100644 index 0000000..b84bf72 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.nl.resx @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Audit Trails + + + Audit Trails geëxporteerd + + + Grenst aan + + + Annuleren + + + Duidelijk + + + Betrokken kolommen + + + Datum + + + Datumbereik voor zoeken + + + Dicht + + + Details voor Trail ID + + + Exporteren naar Excel + + + Gefilterde controletrails geëxporteerd + + + Verbergen + + + Id + + + Lokaal + + + Nieuwe Waarden + + + OK + + + Oude Waarden + + + Primary Key + + + Zoeken naar paden + + + Zoeken in nieuwe waarden + + + Zoeken in oude waarden + + + Tonen + + + Gestreept + + + Table Naam + + + Trail Details + + + Type + + + UTC + + + Uw recente activiteiten. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.ru.resx new file mode 100644 index 0000000..583705f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.ru.resx @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Журналы аудита + + + Журналы аудита экспортированы + + + Обрамлённый + + + Отмена + + + Очистить + + + Затронутые стобцы + + + Дата + + + Диапазон дат для поиска + + + Компактный + + + Детали для записи с ID + + + Экспорт в Excel + + + Отфильтрованные журналы аудита экспортированы + + + Скрыть + + + Id + + + Локальное + + + Новые значения + + + Ok + + + Старые значения + + + Первичный ключ + + + Поиск в журналах + + + Искать в новых значениях + + + Искать в старых значениях + + + Показать + + + Чередующийся + + + Имя таблицы + + + Детали записи в журнале + + + Тип + + + UTC + + + Ваша текущая активность. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.sv.resx new file mode 100644 index 0000000..3b95b8b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/AuditLogs.sv.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Granskningsspår + + + Audit Trails exported + + + Berörda kolumner + + + Datum + + + Detaljer för Spår ID + + + Exportera till Excel + + + Filtered Audit Trails exported + + + Göm + + + Id + + + Lokalt + + + Nya Värden + + + Gamla Värden + + + Primärnyckel + + + Sök efter spår + + + Visa + + + Tabellnamn + + + Spår Detaljer + + + Typ + + + UTC + + + Dina senaste aktiviteter. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.ar.resx new file mode 100644 index 0000000..a803152 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.ar.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أبريل + + + أغسطس + + + العلامات التجارية + + + الرسوم البيانية قادمة قريبا + + + لوحة القيادة + + + ديسمبر + + + سمات المستند الممتدة + + + أنواع المستندات + + + وثائق + + + فبراير + + + يناير + + + يوليو + + + يونيو + + + مارس + + + مايو + + + نوفمبر + + + أكتوبر + + + منتجات + + + رؤى سريعة. + + + تحديثات الوقت الحقيقي & رؤى مع SignalR. + + + الأدوار المسجلة + + + المستخدمون المسجلون + + + سبتمبر + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.de.resx new file mode 100644 index 0000000..a20fd84 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.de.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Apr + + + Aug + + + Marken + + + Diagramme kommen bald... + + + Dashboard + + + Dez + + + Erweiterte Dokumentattribute + + + Dokumenttypen + + + Dokumente + + + Feb + + + Jan + + + Jul + + + Jun + + + Mär + + + Mai + + + Nov + + + Okt + + + Produkte + + + Schnelle Einblicke. + + + Echtzeitaktualisierungen & Einblicke mit SignalR. + + + Registrierte Rollen + + + Registrierte Benutzer + + + Sep + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.en.resx new file mode 100644 index 0000000..0ec5a3f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.en.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Apr + + + Aug + + + Brands + + + Charts comming soon ish... + + + Dashboard + + + Dec + + + Document Extended Attributes + + + Document Types + + + Documents + + + Feb + + + Jan + + + Jul + + + Jun + + + Mar + + + May + + + Nov + + + Oct + + + Products + + + Quick Insights. + + + Realtime Updates & Insights with SignalR. + + + Registered Roles + + + Registered Users + + + Sep + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.es.resx new file mode 100644 index 0000000..e278606 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.es.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Abr + + + Ago + + + Marcas + + + Próximamente gráficos... + + + Panel de Control + + + Dic + + + Atributos Extendidos de Documentos + + + Tipos de Documentos + + + Documentos + + + Feb + + + Ene + + + Jul + + + Jun + + + Mar + + + May + + + Nov + + + Oct + + + Productos + + + Perspectivas Rápidas. + + + Actualizaciones en Tiempo Real & Perspectivas con SignalR. + + + Roles Registrados + + + Usuarios Registrados + + + Sep + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.fr.resx new file mode 100644 index 0000000..819beeb --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.fr.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Avr. + + + Août + + + Marques + + + Tableau de bord + + + Déc. + + + Attributs étendus des documents + + + Types de documents + + + Documents + + + Févr. + + + Janv. + + + Juill. + + + Juin + + + Mars + + + Mai + + + Nov. + + + Oct. + + + Produits + + + Aperçus rapides. + + + Mises à jour en temps réel & aperçus avec SignalR. + + + Roles enregistrés + + + Utilisateurs enregistrés + + + Sept. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.id.resx new file mode 100644 index 0000000..c7a7fed --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.id.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Merek + + + Grafik akan segera hadir... + + + Dasbor + + + Document Extended Attributes + + + Document Types + + + Documents + + + Produk + + + Wawasan Singkat. + + + Wewenang Terdaftar + + + Pengguna Terdaftar + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.it.resx new file mode 100644 index 0000000..316467e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.it.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Prodotti + + + Utenti registrati + + + Marche + + + Grafici... coming soon... + + + Dashboard + + + Approfondimenti rapidi. + + + Ruoli registrati + + + Documenti + + + Tipi di documenti + + + Document Extended Attributes + + + Aggiornamenti in tempo reale e approfondimenti con SignalR + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.km.resx new file mode 100644 index 0000000..809c44a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.km.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ម៉ាក + + + ផ្ទាំងឆាតនឹងមកដល់ឆាប់ៗនេះ + + + ផ្ទាំងទិន្នន័យ + + + ជួរឈរឯកសារ + + + ប្រភេទឯកសារ + + + ឯកសារ + + + ផលិតផល + + + ផ្ទាំងទិន្នន័យសង្ខេប + + + ចំនួនតួនាទីសរុប + + + ចំនួនអ្នកប្រើប្រាស់សរុប + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.nl.resx new file mode 100644 index 0000000..d5e9851 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.nl.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Apr + + + Aug + + + Merken + + + Grafieken binnenkort ish... + + + Dashboard + + + Dec + + + Uitgebreide kenmerken van document + + + Documenttypen + + + Documenten + + + Februari + + + Jan + + + Jul + + + Jun + + + Mar + + + Mei + + + Nov + + + Oct + + + Producten + + + Snelle inzichten. + + + Realtime updates en inzichten met SignalR. + + + Geregistreerde rollen + + + Geregistreerde gebruikers + + + Sep + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.ru.resx new file mode 100644 index 0000000..fab4703 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.ru.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Апр + + + Авг + + + Брендов + + + Графики скоро появятся ... + + + Dashboard + + + Дек + + + Расширенных атрибутов документов + + + Типов документов + + + Документов + + + Фев + + + Янв + + + Июл + + + Июн + + + Мрт + + + Май + + + Ноя + + + Окт + + + Продуктов + + + Быстрая информация. + + + Обновления и аналитика в реальном времени с помощью SignalR. + + + Ролей + + + Пользователей + + + Сен + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.sv.resx new file mode 100644 index 0000000..25c864d --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Pages/Personal/Dashboard.sv.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Varumärken + + + Diagram kommer ganska snart... + + + Instrumentpanel + + + Document Extended Attributes + + + Document Types + + + Documents + + + Produkter + + + Snabba insikter. + + + Registrerade Roller + + + Registrerade Användare + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.ar.resx new file mode 100644 index 0000000..5642e31 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.ar.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + إضافة الخصائص الإضافية + + + إلغاء + + + مسح + + + تاريخ + + + عشري + + + وصف + + + رقم المعرف + + + المعرف الخارجي + + + مجموعة + + + المعرف + + + مفعل؟ + + + Json + + + مفتاح + + + موافق + + + حفظ + + + نص + + + وقت + + + نوع + + + تحديث + + + تحديث الخصائص الإضافية + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.de.resx new file mode 100644 index 0000000..7c7cd54 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.de.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Erweiterte Attribute hinzufügen + + + Abbrechen + + + Leeren + + + Datum + + + Dezimal + + + Beschreibung + + + Objekt-Id + + + Externe Id + + + Gruppe + + + Id + + + Ist Aktiv + + + Json + + + Schlüssel + + + Ok + + + Speichern + + + Text + + + Zeit + + + Typ + + + Aktualisieren + + + Erweiterte Attribute aktualieren + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.en.resx new file mode 100644 index 0000000..9e1f7c0 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.en.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Extended Attribute + + + Cancel + + + Clear + + + Date + + + Decimal + + + Description + + + Entity Id + + + External Id + + + Group + + + Id + + + Is Active + + + Json + + + Key + + + Ok + + + Save + + + Text + + + Time + + + Type + + + Update + + + Update Extended Attribute + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.es.resx new file mode 100644 index 0000000..e061dff --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.es.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Agregar Atributo Extendido + + + Cancelar + + + Limpiar + + + Fecha + + + Decimal + + + Descripción + + + Id de Entidad + + + Id Externo + + + Grupo + + + Id + + + ¿Está Activo? + + + Json + + + Clave + + + Ok + + + Guardar + + + Texto + + + Hora + + + Tipo + + + Actualizar + + + Actualizar Atributos Extendidos + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.fr.resx new file mode 100644 index 0000000..0cbb20b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.fr.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ajouter un attribut étendu + + + Annuler + + + Effacer + + + Date + + + Décimal + + + Description + + + Identifiant de l'entité + + + Identifiant externe + + + Groupe + + + Identifiant + + + Est actif + + + Json + + + Clé + + + OK + + + Sauvegarder + + + Texte + + + Heure + + + Type + + + Mettre à jour + + + Mettre à jour l'attribut étendu + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.id.resx new file mode 100644 index 0000000..9e1f7c0 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.id.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Extended Attribute + + + Cancel + + + Clear + + + Date + + + Decimal + + + Description + + + Entity Id + + + External Id + + + Group + + + Id + + + Is Active + + + Json + + + Key + + + Ok + + + Save + + + Text + + + Time + + + Type + + + Update + + + Update Extended Attribute + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.it.resx new file mode 100644 index 0000000..ff5ace2 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.it.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Extended Attribute + + + Annulla + + + Pulisci + + + Date + + + Decimal + + + Description + + + Entity Id + + + External Id + + + Group + + + Id + + + IsActive + + + Json + + + Key + + + Ok + + + Salva + + + Text + + + Time + + + Type + + + Aggiorna + + + Update Extended Attribute + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.km.resx new file mode 100644 index 0000000..184bb9f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.km.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + បន្ធែមជួរឈរ + + + បោះបង់ + + + សម្អាត + + + Date + + + Decimal + + + ពិពណ៌នា + + + Entity Id + + + External Id + + + ក្រុម + + + Id + + + គឺសកម្ម + + + Json + + + Key + + + អូខេ + + + រក្សាទុក + + + Text + + + Time + + + ប្រភេទ + + + បច្ចុប្បន្នភាព + + + បច្ចុប្បន្នភាពជួរឈរបន្ថែម + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.nl.resx new file mode 100644 index 0000000..1a8594e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.nl.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Uitgebreid kenmerk toevoegen + + + Annuleren + + + Duidelijk + + + Datum + + + Decimaal + + + Beschrijving + + + Entiteits-id + + + Externe id + + + Groep + + + Id + + + Is actief + + + Json + + + Sleutel + + + OK + + + Opslaan + + + Sms + + + Tijd + + + Type + + + Update + + + Uitgebreid kenmerk bijwerken + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.ru.resx new file mode 100644 index 0000000..934224d --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.ru.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Добавить расширенный атрибут + + + Отмена + + + Очистить + + + Дата + + + Числовое значение + + + Описание + + + Id сущности + + + Внешний Id + + + Группа + + + Id + + + Активный? + + + Json значение + + + Ключ + + + Ок + + + Сохранить + + + Текстовое значение + + + Время + + + Тип + + + Обновить + + + Обновить расширенный атрибут + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.sv.resx new file mode 100644 index 0000000..9e1f7c0 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.sv.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Extended Attribute + + + Cancel + + + Clear + + + Date + + + Decimal + + + Description + + + Entity Id + + + External Id + + + Group + + + Id + + + Is Active + + + Json + + + Key + + + Ok + + + Save + + + Text + + + Time + + + Type + + + Update + + + Update Extended Attribute + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.ar.resx new file mode 100644 index 0000000..ca79862 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.ar.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أجراءات + + + كل المجموعات + + + Bordered + + + إنشاء + + + حذف + + + هل تريد حذف السمة الموسعة؟ + + + كثيف + + + وصف + + + تعديل + + + معرف الكينونة + + + تصدير + + + الخصائص الإضافية التي تم تصديرها + + + معرف خارجي + + + تم تصدير السمات الموسعة التي تمت تصفيتها + + + مجموعة + + + رقم المعرف + + + تضمين حقول الكينونة (تصدير) + + + نشط؟ + + + مفتاح + + + إدارة الخصائص الإضافية {0} + + + إدارة سمات {0} {1} الموسعة + + + لا توجد إجراءات مسموح بها + + + غير مسموح. + + + مجموعة مختارة فقط (تصدير) + + + مالك + + + إعادة تحميل + + + ابحث عن {0} السمات الموسعة + + + مخطط + + + نوع + + + قيمة + + + أنت + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.de.resx new file mode 100644 index 0000000..f7b7111 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.de.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktionen + + + Alle Gruppen + + + Gebändert + + + Erstellen + + + Löschen + + + Erweiterte Attribute löschen? + + + Schmal + + + Beschreibung + + + Bearbeiten + + + Objekt-Id + + + Export + + + Erweiterte Attribute exportiert + + + Externe Id + + + Gefilterte erweiterte Attribute exportiert + + + Gruppe + + + Id + + + Objektfelder einschließen (Export) + + + Ist Aktiv + + + Schlüssel + + + Verwalte {0} erweiterte Attribute + + + Verwalte erweiterte {0} Attribute von {1} + + + No Allowed Actions + + + Not Allowed. + + + Only Selected Group (Export) + + + Owner + + + Reload + + + Search For {0} Extended Attributes + + + Striped + + + Type + + + Value + + + you + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.en.resx new file mode 100644 index 0000000..4270e95 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.en.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + All Groups + + + Bordered + + + Create + + + Delete + + + Delete Extended Attribute? + + + Dense + + + Description + + + Edit + + + Entity Id + + + Export + + + Extended Attributes exported + + + External Id + + + Filtered Extended Attributes exported + + + Group + + + Id + + + Include Entity fields (Export) + + + Is Active + + + Key + + + Manage {0} Extended Attributes + + + Manage {0} {1}'s Extended Attributes + + + No Allowed Actions + + + Not Allowed. + + + Only Selected Group (Export) + + + Owner + + + Reload + + + Search For {0} Extended Attributes + + + Striped + + + Type + + + Value + + + you + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.es.resx new file mode 100644 index 0000000..1cfea1f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.es.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acciones + + + Todos los Grupos + + + Bordeado + + + Crear + + + Borrar + + + ¿Eliminar Atributo Extendido? + + + Denso + + + Descripción + + + Editar + + + Id de Entidad + + + Exportar + + + Atributos Extendidos exportados + + + Id Externo + + + Atributos Extendidos Filtrados exportados + + + Grupo + + + Id + + + Incluir campos de Entidad (Exportar) + + + ¿Está Activo? + + + Clave + + + Administrar Atributos Extendidos ({0}) + + + Administrar los Atributos Extendidos de: {0}-{1} + + + Acciones no Permitidas + + + No Permitido. + + + Solo el Grupo Seleccionado (Exportar) + + + Propietario + + + Recargar + + + Buscar Atributos Extendidos ({0}) + + + Rayado + + + Tipo + + + Valor + + + Ud. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.fr.resx new file mode 100644 index 0000000..706054b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.fr.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Tous les groupes + + + Avec bordure + + + Créer + + + Supprimer + + + Supprimer l'attribut étendu ? + + + Dense + + + Description + + + Éditer + + + Identifiant de l'entité + + + Exporter + + + Attributs étendus exportés + + + Identifiant externe + + + Attributs étendus filtrés exportés + + + Groupe + + + Identifiant + + + Inclure tous les champs (export) + + + Est actif + + + Clé + + + Gérer les attributs étendus de {0} + + + Gérer les attributs étendus de {0} {1} + + + Aucune action autorisée + + + Non autorisé. + + + Seulement les groupes sélectionné (export) + + + Propriétaire + + + Recharger + + + Rechercher les attributs étendus de {0} + + + Rayé + + + Type + + + Valeur + + + vous + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.id.resx new file mode 100644 index 0000000..4270e95 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.id.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + All Groups + + + Bordered + + + Create + + + Delete + + + Delete Extended Attribute? + + + Dense + + + Description + + + Edit + + + Entity Id + + + Export + + + Extended Attributes exported + + + External Id + + + Filtered Extended Attributes exported + + + Group + + + Id + + + Include Entity fields (Export) + + + Is Active + + + Key + + + Manage {0} Extended Attributes + + + Manage {0} {1}'s Extended Attributes + + + No Allowed Actions + + + Not Allowed. + + + Only Selected Group (Export) + + + Owner + + + Reload + + + Search For {0} Extended Attributes + + + Striped + + + Type + + + Value + + + you + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.it.resx new file mode 100644 index 0000000..4fb941f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.it.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Azioni + + + All Groups + + + Bordered + + + Crea + + + Cancella + + + Delete Extended Attribute? + + + Dense + + + Descrizione + + + Modifica + + + Entity Id + + + Esporta + + + Extended Attributes exported + + + External Id + + + Filtered Extended Attributes exported + + + Gruppo + + + Id + + + Include Entity fields (Export) + + + Attivo + + + Key + + + Manage {0} Extended Attributes + + + Manage {0} {1}'s Extended Attributes + + + Nessuna azione è consentita + + + Non consentito + + + Solo il gruppo selezionato (Export) + + + Owner + + + Ricarica + + + Search For {0} Extended Attributes + + + Striped + + + Tipo + + + Valore + + + you + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.km.resx new file mode 100644 index 0000000..a88e072 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.km.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + សកម្មភាព + + + ក្រុមទាំងអស់ + + + ព្រុំព្រទល់ + + + បង្កើត + + + លុប + + + លុបជួរឈរបន្ថែម? + + + បង្រួម + + + ពិពណ៌នា + + + កែប្រែ + + + Entity Id + + + នាំចេញ + + + ជួរឈរបន្ថែមនាំចេញ + + + External Id + + + ច្រោះជួរឈរបន្ថែមនាំចេញ + + + ក្រុម + + + Id + + + Include Entity fields (Export) + + + គឺសកម្ម + + + Key + + + Manage {0} Extended Attributes + + + Manage {0} {1}'s Extended Attributes + + + មិនត្រូវបានអនុញ្ញាត + + + មិនអនុញ្ញាត្ត + + + Only Selected Group (Export) + + + ម្ចាស់ + + + ផ្ទុកឡើងវិញ + + + Search For {0} Extended Attributes + + + Striped + + + ប្រភេទ + + + តម្លៃ + + + you + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.nl.resx new file mode 100644 index 0000000..b54e93e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.nl.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acties + + + Alle groepen + + + Grenst aan + + + Aanmaken + + + Verwijderen + + + Uitgebreid kenmerk verwijderen? + + + Dicht + + + Beschrijving + + + Bewerken + + + Entiteits-id + + + Exporteren + + + Geëxporteerde uitgebreide kenmerken + + + Externe id + + + Gefilterde uitgebreide kenmerken geëxporteerd + + + Groep + + + Id + + + Entiteitsvelden opnemen (exporteren) + + + Is actief + + + Sleutel + + + Uitgebreide kenmerken beheren {0} + + + Uitgebreide kenmerken van {0} {1} beheren + + + Geen toegestane acties + + + Niet toegestaan. + + + Alleen geselecteerde groep (exporteren) + + + Eigenaar + + + Herladen + + + Zoeken naar {0} uitgebreide kenmerken + + + Gestreept + + + Type + + + Waarde + + + jij + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.ru.resx new file mode 100644 index 0000000..7ec3a74 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.ru.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Действия + + + Все группы + + + Обрамлённый + + + Создать + + + Удалить + + + Удалить расширенный атрибут? + + + Компактный + + + Описание + + + Редактировать + + + Id сущности + + + Экспорт в Excel + + + Расширенные атрибуты экспортированы + + + Внешний Id + + + Отфильтрованные расширенные атрибуты экспортированы + + + Группа + + + Id + + + Включить поля сущности (Экспорт) + + + Активный? + + + Ключ + + + Управление расширенными атрибутами {0} + + + Управление расширенными атрибутами {1} с Id = {0} + + + Нет доступных действий + + + Нет доступа. + + + Только выбранную группу (Экспорт) + + + Владелец + + + Перезагрузить + + + Поиск расширенных атрибутов {0} + + + Чередующийся + + + Тип + + + Значение + + + Вы + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.sv.resx new file mode 100644 index 0000000..4270e95 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.sv.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + All Groups + + + Bordered + + + Create + + + Delete + + + Delete Extended Attribute? + + + Dense + + + Description + + + Edit + + + Entity Id + + + Export + + + Extended Attributes exported + + + External Id + + + Filtered Extended Attributes exported + + + Group + + + Id + + + Include Entity fields (Export) + + + Is Active + + + Key + + + Manage {0} Extended Attributes + + + Manage {0} {1}'s Extended Attributes + + + No Allowed Actions + + + Not Allowed. + + + Only Selected Group (Export) + + + Owner + + + Reload + + + Search For {0} Extended Attributes + + + Striped + + + Type + + + Value + + + you + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.ar.resx new file mode 100644 index 0000000..23dee1b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.ar.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + إلغاء + + + استيراد + + + الرجاء رفع ملف اكسل! + + + رفع + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.de.resx new file mode 100644 index 0000000..fd884a0 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.de.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Abbrechen + + + Importieren + + + Bitte lade eine Excel-Datei hoch! + + + Hochladen + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.en.resx new file mode 100644 index 0000000..7d6c332 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.en.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancel + + + Import + + + Please upload excel file! + + + Upload + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.es.resx new file mode 100644 index 0000000..cb3b505 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.es.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancelar + + + Importar + + + Por favor subar el archivo Excel! + + + Subir + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.fr.resx new file mode 100644 index 0000000..eece67a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.fr.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annuler + + + Importer + + + Merci de téléverser un fichier excel ! + + + Téléverser + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.id.resx new file mode 100644 index 0000000..7d6c332 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.id.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancel + + + Import + + + Please upload excel file! + + + Upload + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.it.resx new file mode 100644 index 0000000..7d6c332 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.it.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancel + + + Import + + + Please upload excel file! + + + Upload + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.km.resx new file mode 100644 index 0000000..7d6c332 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.km.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancel + + + Import + + + Please upload excel file! + + + Upload + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.nl.resx new file mode 100644 index 0000000..719c7eb --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.nl.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annuleren + + + Importeren + + + Upload excel-bestand! + + + Uploaden + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.ru.resx new file mode 100644 index 0000000..6cbf650 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.ru.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Отмена + + + Импорт + + + Пожалуйста, загрузите excel файл! + + + Загрузить + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.sv.resx new file mode 100644 index 0000000..7d6c332 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/ImportExcelModal.sv.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancel + + + Import + + + Please upload excel file! + + + Upload + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.ar.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.ar.resx new file mode 100644 index 0000000..5ab4357 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.ar.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Dutch - Netherlands + + + English + + + French + + + German + + + Indonesia + + + Italian + + + Khmer + + + Russian + + + Spanish + + + Swedish + + + عربي + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.de.resx new file mode 100644 index 0000000..0b8081b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.de.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Niederländisch - Nederland + + + Englisch - English + + + Französisch - Français + + + Deutsch + + + Indonesisch - bahasa Indonesia + + + Italienisch - Italiano + + + Khmer - ខ្មែរ + + + Russisch - русский + + + Spanisch - Español + + + Schwedisch - Svenska + + + Arabisch - عربي + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.en.resx new file mode 100644 index 0000000..5ab4357 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.en.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Dutch - Netherlands + + + English + + + French + + + German + + + Indonesia + + + Italian + + + Khmer + + + Russian + + + Spanish + + + Swedish + + + عربي + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.es.resx new file mode 100644 index 0000000..3c1f165 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.es.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Holandés - Holanda + + + Inglés + + + Francés + + + Alemán + + + Indonesia + + + Italiano + + + Jemer + + + Ruso + + + Español + + + Sueco + + + عربي + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.fr.resx new file mode 100644 index 0000000..09a7e86 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.fr.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Dutch - Netherlands + + + Anglais + + + Français + + + Allemand + + + Indonésie + + + Italien + + + Jemer + + + Russe + + + Espanol + + + Suédois + + + عربي + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.id.resx new file mode 100644 index 0000000..e728993 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.id.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Dutch - Netherlands + + + Inggris + + + Perancis + + + Jerman + + + Indonesiano + + + Italia + + + Khmer + + + Rusia + + + Orang Spanyol + + + Orang Swedia + + + عربي + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.it.resx new file mode 100644 index 0000000..001bf81 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.it.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Dutch - Netherlands + + + Inglese + + + Francese + + + Tedesco + + + Indonesiano + + + Italiano + + + Khmer + + + Russo + + + Spagnolo + + + Svedese + + + عربي + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.nl.resx new file mode 100644 index 0000000..5ab4357 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.nl.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Dutch - Netherlands + + + English + + + French + + + German + + + Indonesia + + + Italian + + + Khmer + + + Russian + + + Spanish + + + Swedish + + + عربي + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.ru.resx new file mode 100644 index 0000000..9290d77 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Components/LanguageSelector.ru.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Голландский - Нидерланды + + + Английский + + + Французский + + + Немецкий + + + Индонезия + + + Итальянский + + + Кхмерский + + + Русский + + + Испанский + + + Шведский + + + عربي + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.en.resx new file mode 100644 index 0000000..ad5c1a2 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.en.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancel + + + Confirm + + + Delete Confirmation + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.es.resx new file mode 100644 index 0000000..83a4d45 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.es.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancelar + + + Confirmar + + + Confirmación de borrado + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.fr.resx new file mode 100644 index 0000000..8aa2a1a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.fr.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annuler + + + Confirmer + + + Confirmation de suppression + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.id.resx new file mode 100644 index 0000000..33fd900 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.id.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Batal + + + Konfirmasi + + + Konfirmasi Hapus + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.it.resx new file mode 100644 index 0000000..a529978 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.it.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annulla + + + Conferma + + + Conferma eliminazione + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.km.resx new file mode 100644 index 0000000..819d5ff --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.km.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + បោះបង់ + + + បញ្ជាក់ + + + បញ្ជាក់លុប + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.nl.resx new file mode 100644 index 0000000..d9fdfce --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.nl.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annuleren + + + Bevestig + + + Verwijder Bevestiging + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.ru.resx new file mode 100644 index 0000000..7b147f7 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.ru.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Отмена + + + Подтвердить + + + Подтвержедние удаления + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.sv.resx new file mode 100644 index 0000000..5a9a09f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.sv.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Avbryt + + + Bekräfta + + + Radera bekräftelse + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.en.resx new file mode 100644 index 0000000..2bb3110 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.en.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancel + + + Logout Confirmation + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.es.resx new file mode 100644 index 0000000..fa3257a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.es.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancelar + + + Confirmación de Salida + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.fr.resx new file mode 100644 index 0000000..8cc6a39 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.fr.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annuler + + + Confirmation de déconnexion + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.id.resx new file mode 100644 index 0000000..077f91a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.id.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Batal + + + Konfirmasi Keluar + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.it.resx new file mode 100644 index 0000000..d2222c8 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.it.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annulla + + + Conferma Logout + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.km.resx new file mode 100644 index 0000000..8438a5c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.km.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + បោះបង់ + + + បញ្ជាក់ពីការចាកចេញពីប្រព័ន្ធ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.nl.resx new file mode 100644 index 0000000..01f52ed --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.nl.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annuleren + + + Afmeldbevestiging + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.ru.resx new file mode 100644 index 0000000..68a6131 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.ru.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Отмена + + + Подтверждение выхода + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.sv.resx new file mode 100644 index 0000000..7ad76d8 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/Logout.sv.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Avbryt + + + Bekräftelse För Utloggning + + \ No newline at end of file diff --git "a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/\342\200\217\342\200\217DeleteConfirmation.ar.resx" "b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/\342\200\217\342\200\217DeleteConfirmation.ar.resx" new file mode 100644 index 0000000..7172f86 --- /dev/null +++ "b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/\342\200\217\342\200\217DeleteConfirmation.ar.resx" @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + الغاء + + + تأكيد + + + تأكيد الحذف + + \ No newline at end of file diff --git "a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/\342\200\217\342\200\217Logout.ar.resx" "b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/\342\200\217\342\200\217Logout.ar.resx" new file mode 100644 index 0000000..c23d9df --- /dev/null +++ "b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/Dialogs/\342\200\217\342\200\217Logout.ar.resx" @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + الغاء + + + تأكيد الخروج + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.de.resx new file mode 100644 index 0000000..819ef5a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.de.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Konto + + + Kauf mir einen Kaffee! + + + Chat? + + + Community + + + Facebook-Gruppe + + + Facebook-Seite + + + Repository forken + + + Ausloggen + + + Möchtest du dich wirklich ausloggen? + + + MudBlazor-Dokumentation + + + Schnellstartanleitung + + + Token aktualisiert. + + + Ressourcen + + + Support + + + Umschalten zum dunklen Modus + + + Rechts nach Links / Links nach Rechts umschalten + + + Willkommen {0} + + + Du wurdest ausgeloggt, weil die Berechtigungen einer deine Rollen aktualisiert wurden. + + + Du wurdest ausgeloggt, weil der Benutzer mit deinem Token gelöscht wurde. + + + Bis bist ausgeloggt. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.en.resx new file mode 100644 index 0000000..ef2c7d0 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.en.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Account + + + Buy Me A Coffee! + + + Chat? + + + Community + + + Facebook Group + + + Facebook Page + + + Fork Repository + + + Logout + + + Do you really want to Logout? + + + MudBlazor Documentation + + + Quick-Start Guide + + + Refreshed Token. + + + Resources + + + Support + + + Toggle Dark Mode + + + Toggle right-to-left/left-to-right + + + Welcome {0} + + + You are logged out because the Permissions of one of your Roles have been updated. + + + You are logged out because the user with your Token has been deleted. + + + You are Logged Out. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.es.resx new file mode 100644 index 0000000..79c64e9 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.es.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cuenta + + + Buy Me A Coffee! + + + Chat? + + + Comunidad + + + Grupo de Facebook + + + Página de Facebook + + + Salir + + + ¿Realmente quiere salir del sistema? + + + Documentación de MudBlazor + + + Guía de Inicio Rápido + + + Token refrescado. + + + Recursos + + + Soporte + + + Alternar modo oscuro + + + Alternar right-to-left/left-to-right + + + Bienvenido {0} + + + Ha cerrado sesión porque los permisos de su Rol han sido actualizados. + + + Ha cerrado sesión porque el usuario asociado a su Token ha sido borrado. + + + Ha cerrado sesión. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.fr.resx new file mode 100644 index 0000000..e3538b8 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.fr.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Compte + + + Buy Me A Coffee! + + + Chatter ? + + + Communauté + + + Grouppe Facebook + + + Page Facebook + + + Forker le dépôt + + + Déconnexion + + + Voulez-vous vraiment vous déconnecter ? + + + Documentation MudBlazor + + + Guide de démarrage rapide + + + Jeton raffraîchi + + + Ressources + + + Support + + + Basculer le mode sombre / mode clair + + + Basculer affichage gauche-droite / droite-gauche + + + Bienvenu {0} + + + Vous avez été déconnecté car les permissions de l'un de vos rôles ont été mise à jour. + + + Vous avez été déconnecté car l'utilisateur lié au jeton a été supprimé. + + + Vous êtes déconnecté. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.id.resx new file mode 100644 index 0000000..33714f0 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.id.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Akun + + + Buy Me A Coffee! + + + Chat? + + + Komunitas + + + Grup Facebook + + + Halaman Facebook + + + Fork Repository + + + Keluar + + + Apakah anda yakin ingin Keluar? + + + Dokumentasi MudBlazor + + + Panduan Awal Singkat + + + Refreshed Token. + + + Resources + + + Dukung + + + Toggle Mode Gelap + + + Toggle right-to-left/left-to-right + + + Selamat Datang {0} + + + You are logged out because the Permissions of one of your Roles have been updated. + + + You are logged out because the user with your Token has been deleted. + + + You are Logged Out. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.it.resx new file mode 100644 index 0000000..5140d04 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.it.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Account + + + Buy Me A Coffee! + + + Chat? + + + Community + + + Gruppo Facebook + + + Pagina Facebook + + + Fork Repository + + + Logout + + + Vuoi effettuare il Logout? + + + Documentazione MudBlazor + + + Guida rapida + + + Refreshed Token. + + + Risorse + + + Supporto + + + Attiva la modalità scura + + + Toggle right-to-left/left-to-right + + + Benvenuto {0} + + + You are logged out because the Permissions of one of your Roles have been updated. + + + You are logged out because the user with your Token has been deleted. + + + You are Logged Out. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.km.resx new file mode 100644 index 0000000..227e366 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.km.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + គណនី + + + ទិញកាហ្វេមួយមក! + + + ឆាត? + + + សហគមន៍ + + + ក្រុមហ្វេសប៊ុក + + + ទំព័រហ្វេសប៊ុក + + + ចាកចេញ + + + តើអ្នកពិតជាចង់ចាកចេញមែនទេ? + + + ឯកសារ MudBlazor + + + ម​គ្គុ​ទេស​ក៍​ចាប់​ផ្តើ​ម​រហ័ស + + + Refreshed Token. + + + ធនធាន + + + គាំទ្រ + + + បិទ / បើកស្បែកងងឹត + + + Toggle right-to-left/left-to-right + + + ស្វាគមន៏ {0} + + + អ្នកត្រូវបានចាកចេញពីប្រព័ន្ធព្រោះសិទ្ធិនៃមុខងារបស់អ្នកត្រូវបានធ្វើបច្ចុប្បន្នភាព + + + អ្នកត្រូវបានចាកចេញពីប្រព័ន្ធព្រោះកូដធូឃីនអ្នកត្រូវបានលុប + + + អ្នកត្រូវបានចាកចេញ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.nl.resx new file mode 100644 index 0000000..9cbbf9e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.nl.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Account + + + Koop me een koffie! + + + Chatten? + + + Community + + + Facebook Groep + + + Facebook Pagina + + + Fork Repository + + + Uitloggen + + + Wil je echt uitloggen? + + + MudBlazor Documentation + + + Snelstartgids + + + Vernieuwd Token. + + + Bronnen + + + Ondersteuning + + + Donkere Modus Schakelen + + + Wissel van rechts naar links/links naar rechts + + + Welkom {0} + + + U bent uitgelogd omdat de machtigingen van een van uw rollen zijn bijgewerkt. + + + U bent uitgelogd omdat de gebruiker met uw Token is verwijderd. + + + U bent uitgelogd. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.ru.resx new file mode 100644 index 0000000..1fee9c5 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.ru.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Аккаунт + + + Купить мне кофе! + + + К чату? + + + Сообщество + + + Группа Facebook + + + Страница Facebook + + + Репозиторий + + + Выйти + + + Подтверждение выхода + + + Документация MudBlazor + + + Краткое руководство пользователя + + + Токен обновлён. + + + Ресурсы + + + Поддержка + + + Переключить Тёмный режим + + + Переключить справа-на-лево/слева-на-право + + + Добро пожаловать {0} + + + Вы вышли из системы, потому что были обновлены разрешения одной из ваших ролей. + + + Вы вышли из системы, потому что пользователь с вашим токеном был удален. + + + Вы вышли из системы. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.sv.resx new file mode 100644 index 0000000..d66bc71 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/MainLayout.sv.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Konto + + + Buy Me A Coffee! + + + Chat? + + + Community + + + Facebook Grupp + + + Facebook Sida + + + Fork Repository + + + Logga ut + + + Vill du verkligen logga ut? + + + MudBlazor Dokumentation + + + Snabbstart Guide + + + Refreshed Token. + + + Resurser + + + Support + + + Växla Mörktläge + + + Toggle right-to-left/left-to-right + + + Välkommen {0} + + + You are logged out because the Permissions of one of your Roles have been updated. + + + You are logged out because the user with your Token has been deleted. + + + You are Logged Out. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.de.resx new file mode 100644 index 0000000..8bd8b09 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.de.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Konto + + + Administrator + + + Marken + + + Katalog + + + Chat + + + Kommunikation + + + Dashboard + + + Dokumentenverwaltung + + + Dokumentenspeicher + + + Documenttypen + + + FAQs + + + Merkmale + + + Start + + + Protokolle + + + E-Mail + + + Persönlich + + + Produkte + + + Schnellstartanleitung + + + Ressourcen + + + Rollen + + + Swagger + + + Benutzer + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.en.resx new file mode 100644 index 0000000..61adb32 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.en.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Account + + + Administrator + + + Brands + + + Catalog + + + Chat + + + Communication + + + Dashboard + + + Document Management + + + Document Store + + + Document Types + + + FAQs + + + Features + + + Home + + + Logs + + + Mail + + + Personal + + + Products + + + Quick Start Guide + + + Resources + + + Roles + + + Swagger + + + Users + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.es.resx new file mode 100644 index 0000000..6bfbf6e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.es.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cuenta + + + Administrador + + + Auditoría + + + Marcas + + + Gestión de catálogo + + + Chat + + + Comunicaciones + + + Panel de Control + + + Administración de Documentos + + + Almacén de Documentos + + + Tipos de Documentos + + + FAQs + + + Características + + + Inicio + + + Mail + + + Personal + + + Productos + + + Guía de Inicio Rápido + + + Recursos + + + Roles + + + Swagger + + + Usuarios + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.fr.resx new file mode 100644 index 0000000..b888549 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.fr.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Compte + + + Administrateur + + + Pistes d'audit + + + Marques + + + Gestion du catalogue + + + Conversations + + + Communication + + + Tableau de bord + + + Gestion des documents + + + Stockage des documents + + + Types de documents + + + FAQ + + + Fonctionnalités + + + Accueil + + + Courriel + + + Renseignements personnels + + + Produits + + + Guide de démarrage rapide + + + Ressources + + + Rôles + + + Swagger + + + Utilisateurs + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.id.resx new file mode 100644 index 0000000..5240880 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.id.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Akun + + + Administrator + + + Audit Trails + + + Merek + + + Manajemen Katalog + + + Obrolan + + + Komunikasi + + + Dasbor + + + Document Management + + + Document Store + + + Document Types + + + FAQs + + + Fitur + + + Beranda + + + Mail + + + Personal + + + Produk + + + Panduan Awal Singkat + + + Resources + + + Wewenang + + + Swagger + + + Pengguna + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.it.resx new file mode 100644 index 0000000..371cd91 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.it.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Account + + + Amministratore + + + Marche + + + Gestione catalogo + + + Chat + + + Comunicazione + + + Dashboard + + + Document Management + + + Archivio documenti + + + Document Types + + + FAQs + + + Caratteristiche + + + Home + + + Registro Attività + + + Mail + + + Personale + + + Prodotti + + + Guida rapida + + + Risorse + + + Ruoli + + + Swagger + + + Utenti + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.km.resx new file mode 100644 index 0000000..01df5e7 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.km.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + គណនី + + + រដ្ឋបាល + + + ផលិតផល + + + គ្រប់គ្រងកាតាឡុក + + + ទំនាក់ទំនង + + + ការគ្រប់គ្រងឯកសារ + + + ប្រភេទឯកសារ + + + កម្រងសំណួរចម្លើយ + + + មុខងារ + + + ទំព័រដើម + + + ឯកជន + + + ផលិតផល + + + ធនធាន + + + សិទ្ធិប្រើប្រាស់ + + + អ្នកប្រើប្រាស់ + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.nl.resx new file mode 100644 index 0000000..30d1ce8 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.nl.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Account + + + Administrator + + + Audit Trails + + + Merken + + + Catalogusbeheer + + + Chat + + + Communicatie + + + Dashboard + + + Documentbeheer + + + Documentopslag + + + Documenttypen + + + FAQs + + + Functies + + + Hoofdscherm + + + Mail + + + Persoonlijk + + + Producten + + + Snelstartgids + + + Bronnen + + + Rollen + + + Swagger + + + Gebruikers + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.ru.resx new file mode 100644 index 0000000..253d25a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.ru.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Аккаунт + + + Администрирование + + + Журналы аудита + + + Бренды + + + Управление каталогом + + + Чат + + + Коммуникации + + + Dashboard + + + Управление документами + + + Хранилище документов + + + Типы документов + + + FAQ + + + Функции + + + Домашняя + + + Почта + + + Персональные данные + + + Продукты + + + Краткое руководство пользователя + + + Ресурсы + + + Роли + + + Swagger + + + Пользователи + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.sv.resx new file mode 100644 index 0000000..d85fdd1 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NavMenu.sv.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Konto + + + Administratör + + + Audit Trails + + + Märken + + + Kataloghantering + + + Chatt + + + Kommunikation + + + Översikt + + + Document Management + + + Dokumentlagring + + + Document Types + + + FAQs + + + Funktioner + + + Hem + + + Mail + + + Personal + + + Produkter + + + Snabbstart Guide + + + Resurser + + + Roler + + + Swagger + + + Användare + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.de.resx new file mode 100644 index 0000000..15b332f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.de.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Zur Startseite gehen! + + + Die gesuchte Seite existiert nicht! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.en.resx new file mode 100644 index 0000000..3b95741 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.en.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Go Home! + + + The page you were looking for doesn't exist. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.es.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.es.resx new file mode 100644 index 0000000..8cda145 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.es.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ir a Inicio! + + + La página que busca no existe + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.fr.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.fr.resx new file mode 100644 index 0000000..c0d6d60 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.fr.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Revenir à l'accueil + + + La page que vous recherchez n'existe pas. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.id.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.id.resx new file mode 100644 index 0000000..1b922b7 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.id.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Kembali ke Beranda! + + + Halaman yang anda tuju tidak tersedia. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.it.resx new file mode 100644 index 0000000..5f231c6 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.it.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Vai alla Home! + + + La pagina che stavi cercando non esiste. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.km.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.km.resx new file mode 100644 index 0000000..b6c6f4b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.km.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ទៅទំព័រដើម! + + + ទំព័រដែលអ្នកមកកាន់នេះគឺពុំមានទេ! + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.nl.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.nl.resx new file mode 100644 index 0000000..39ea8d9 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.nl.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ga naar hoofdpagina + + + De pagina die u zocht bestaat niet + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.ru.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.ru.resx new file mode 100644 index 0000000..506a4d9 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.ru.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + На домашнюю страницу! + + + Страница, которую вы искали, не существует. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.sv.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.sv.resx new file mode 100644 index 0000000..e49cb97 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/NotFoundLayout.sv.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Till Start! + + + Sidan du letar efter finns inte. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/SharedResource.de.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/SharedResource.de.resx new file mode 100644 index 0000000..c6de4f5 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/SharedResource.de.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktionen + + + Fortgeschrittene Suche + + + Marke + + + Abbrechen + + + Erstellen + + + Bearbeiten + + + Produkt + + + Produkte + + + Neu laden + + + Suche nach + + + Aktualisieren + + + Benutzer + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/SharedResource.en.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/SharedResource.en.resx new file mode 100644 index 0000000..4ced943 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/SharedResource.en.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Advanced Search + + + Brand + + + Cancel + + + Create + + + Edit + + + Product + + + Products + + + Reload + + + Search for + + + Update + + + User + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/SharedResource.it.resx b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/SharedResource.it.resx new file mode 100644 index 0000000..310e16e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/SharedResource.it.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Azioni + + + Ricerca avanzata + + + Marchio + + + Annulla + + + Crea + + + Modifica + + + Prodotto + + + Prodotti + + + Ricarica + + + Ricerca per + + + Aggiorna + + + Utente + + \ No newline at end of file diff --git "a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/\342\200\217\342\200\217MainLayout.ar.resx" "b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/\342\200\217\342\200\217MainLayout.ar.resx" new file mode 100644 index 0000000..55bb1c9 --- /dev/null +++ "b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/\342\200\217\342\200\217MainLayout.ar.resx" @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + الحساب + + + اشتري لي قهوة! + + + دردشة؟ + + + تواصل اجتماعي + + + مجموعة الفيسبوك + + + صفحة الفيسبوك + + + نسخ الشوكة + + + تسجيل خروج + + + هل تريد حقًا تسجيل الخروج؟ + + + توثيق MudBlazor + + + دليل البدء السريع + + + Rرمز محدث. + + + الموارد + + + الدعم + + + تبديل الوضع الداكن + + + التبديل من اليمين إلى اليسار / من اليسار إلى اليمين + + + مرحبًا {0} + + + لقد تم تسجيل خروجك لأنه تم تحديث أذونات أحد الأدوار الخاصة بك. + + + لقد تم تسجيل خروجك لأنه تم حذف المستخدم الذي يحمل الرمز المميز الخاص بك. + + + لقد قمت بتسجيل الخروج. + + \ No newline at end of file diff --git "a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/\342\200\217\342\200\217NavMenu.ar.resx" "b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/\342\200\217\342\200\217NavMenu.ar.resx" new file mode 100644 index 0000000..50ba92e --- /dev/null +++ "b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/\342\200\217\342\200\217NavMenu.ar.resx" @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + الحساب + + + الإدارة + + + مسارات المراجعة + + + العلامات التجارية + + + إدارة الكتالوج + + + الدردشة + + + التواصل + + + لوحة الإدارة + + + إدارة المستندات + + + مخزن المستندات + + + أنواع المستندات + + + أسئلة وأجوبة + + + سمات + + + الصفحة الرئيسية + + + بريد + + + شخصي + + + المنتجات + + + دليل البدء السريع + + + الموارد + + + الأدوار + + + Swagger + + + المستخدمون + + \ No newline at end of file diff --git "a/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/\342\200\217\342\200\217NotFoundLayout.ar.resx" "b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/\342\200\217\342\200\217NotFoundLayout.ar.resx" new file mode 100644 index 0000000..fa752e5 --- /dev/null +++ "b/blazor-wasm-boilerplate-main/src/Client/Resources/Shared/\342\200\217\342\200\217NotFoundLayout.ar.resx" @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + الذهاب للرئيسية! + + + الصفحة التي تبحث عنها غير موجودة. + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Shared/ApiHelper.cs b/blazor-wasm-boilerplate-main/src/Client/Shared/ApiHelper.cs new file mode 100644 index 0000000..1d4285e --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Shared/ApiHelper.cs @@ -0,0 +1,86 @@ +using FSH.BlazorWebAssembly.Client.Components.Common; +using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Shared; + +public static class ApiHelper +{ + public static async Task ExecuteCallGuardedAsync( + Func> call, + ISnackbar snackbar, + CustomValidation? customValidation = null, + string? successMessage = null) + { + customValidation?.ClearErrors(); + try + { + var result = await call(); + + if (!string.IsNullOrWhiteSpace(successMessage)) + { + snackbar.Add(successMessage, Severity.Info); + } + + return result; + } + catch (ApiException ex) + { + if (ex.Result.Errors is not null) + { + customValidation?.DisplayErrors(ex.Result.Errors); + } + else + { + snackbar.Add("Something went wrong!", Severity.Error); + } + } + catch (ApiException ex) + { + snackbar.Add(ex.Result.Exception, Severity.Error); + } + catch (Exception ex) + { + snackbar.Add(ex.Message, Severity.Error); + } + + return default; + } + + public static async Task ExecuteCallGuardedAsync( + Func call, + ISnackbar snackbar, + CustomValidation? customValidation = null, + string? successMessage = null) + { + customValidation?.ClearErrors(); + try + { + await call(); + + if (!string.IsNullOrWhiteSpace(successMessage)) + { + snackbar.Add(successMessage, Severity.Success); + } + + return true; + } + catch (ApiException ex) + { + if (ex.Result.Errors is not null) + { + customValidation?.DisplayErrors(ex.Result.Errors); + } + else + { + snackbar.Add("Something went wrong!", Severity.Error); + } + } + catch (ApiException ex) + { + snackbar.Add(ex.Result.Exception, Severity.Error); + } + + return false; + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Shared/BaseLayout.razor b/blazor-wasm-boilerplate-main/src/Client/Shared/BaseLayout.razor new file mode 100644 index 0000000..9eaabaa --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Shared/BaseLayout.razor @@ -0,0 +1,33 @@ +@inherits LayoutComponentBase + + + + + + + + + + + + + + @Body + + + + + + + + + + @Body + + + + + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Shared/BaseLayout.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Shared/BaseLayout.razor.cs new file mode 100644 index 0000000..6778e2b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Shared/BaseLayout.razor.cs @@ -0,0 +1,49 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.Preferences; +using FSH.BlazorWebAssembly.Client.Infrastructure.Theme; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Shared; + +public partial class BaseLayout +{ + private ClientPreference? _themePreference; + private MudTheme _currentTheme = new LightTheme(); + private bool _themeDrawerOpen; + private bool _rightToLeft; + + protected override async Task OnInitializedAsync() + { + _themePreference = await ClientPreferences.GetPreference() as ClientPreference; + if (_themePreference == null) _themePreference = new ClientPreference(); + SetCurrentTheme(_themePreference); + + Snackbar.Add("Like this boilerplate? ", Severity.Normal, config => + { + config.BackgroundBlurred = true; + config.Icon = Icons.Custom.Brands.GitHub; + config.Action = "Star us on Github!"; + config.ActionColor = Color.Primary; + config.Onclick = snackbar => + { + Navigation.NavigateTo("https://github.com/fullstackhero/blazor-wasm-boilerplate"); + return Task.CompletedTask; + }; + }); + } + + private async Task ThemePreferenceChanged(ClientPreference themePreference) + { + SetCurrentTheme(themePreference); + await ClientPreferences.SetPreference(themePreference); + } + + private void SetCurrentTheme(ClientPreference themePreference) + { + _currentTheme = themePreference.IsDarkMode ? new DarkTheme() : new LightTheme(); + _currentTheme.Palette.Primary = themePreference.PrimaryColor; + _currentTheme.Palette.Secondary = themePreference.SecondaryColor; + _currentTheme.LayoutProperties.DefaultBorderRadius = $"{themePreference.BorderRadius}px"; + _currentTheme.LayoutProperties.DefaultBorderRadius = $"{themePreference.BorderRadius}px"; + _rightToLeft = themePreference.IsRTL; + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Shared/DialogServiceExtensions.cs b/blazor-wasm-boilerplate-main/src/Client/Shared/DialogServiceExtensions.cs new file mode 100644 index 0000000..597ed31 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Shared/DialogServiceExtensions.cs @@ -0,0 +1,19 @@ +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Shared; + +public static class DialogServiceExtensions +{ + public static Task ShowModalAsync(this IDialogService dialogService, DialogParameters parameters) + where TDialog : ComponentBase => + dialogService.ShowModal(parameters).Result; + + public static IDialogReference ShowModal(this IDialogService dialogService, DialogParameters parameters) + where TDialog : ComponentBase + { + var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Medium, FullWidth = true, DisableBackdropClick = true }; + + return dialogService.Show(string.Empty, parameters, options); + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Shared/MainLayout.razor b/blazor-wasm-boilerplate-main/src/Client/Shared/MainLayout.razor new file mode 100644 index 0000000..7eec5df --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Shared/MainLayout.razor @@ -0,0 +1,107 @@ +@inject IStringLocalizer L + + + + + + + @L["fullstackhero"] + + + + @L["Sponsor"] + + + + @L["Community"] + @L["Discord"] + @L["Facebook"] + + LinkedIn + Buy Me a Coffee! + + Open Collective + + @L["Resources"] + @L["Documentation"] + + + + + + + + + + + + + + +
+ + +
+ @L["Community"] + @L["Discord"] + @L["Facebook"] + + LinkedIn + @L["Resources"] + + @L["MudBlazor Documentation"] + + @L["Quick-Start Guide"] +
+ +
+ + + + + +
+ + +
+ + @L["Account"] +
+
+ +
+ + @L["Dashboard"] +
+
+
+ + Logout + +
+
+
+
+
+ + + + + + + + @ChildContent + + + + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Shared/MainLayout.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Shared/MainLayout.razor.cs new file mode 100644 index 0000000..51aba54 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Shared/MainLayout.razor.cs @@ -0,0 +1,63 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.Preferences; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace FSH.BlazorWebAssembly.Client.Shared; + +public partial class MainLayout +{ + [Parameter] + public RenderFragment ChildContent { get; set; } = default!; + [Parameter] + public EventCallback OnDarkModeToggle { get; set; } + [Parameter] + public EventCallback OnRightToLeftToggle { get; set; } + + private bool _drawerOpen; + private bool _rightToLeft; + + protected override async Task OnInitializedAsync() + { + if (await ClientPreferences.GetPreference() is ClientPreference preference) + { + _rightToLeft = preference.IsRTL; + _drawerOpen = preference.IsDrawerOpen; + } + } + + private async Task RightToLeftToggle() + { + bool isRtl = await ClientPreferences.ToggleLayoutDirectionAsync(); + _rightToLeft = isRtl; + + await OnRightToLeftToggle.InvokeAsync(isRtl); + } + + public async Task ToggleDarkMode() + { + await OnDarkModeToggle.InvokeAsync(); + } + + private async Task DrawerToggle() + { + _drawerOpen = await ClientPreferences.ToggleDrawerAsync(); + } + + private void Logout() + { + var parameters = new DialogParameters + { + { nameof(Dialogs.Logout.ContentText), $"{L["Logout Confirmation"]}"}, + { nameof(Dialogs.Logout.ButtonText), $"{L["Logout"]}"}, + { nameof(Dialogs.Logout.Color), Color.Error} + }; + + var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true }; + DialogService.Show(L["Logout"], parameters, options); + } + + private void Profile() + { + Navigation.NavigateTo("/account"); + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Shared/NavMenu.razor b/blazor-wasm-boilerplate-main/src/Client/Shared/NavMenu.razor new file mode 100644 index 0000000..9ccb1ba --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Shared/NavMenu.razor @@ -0,0 +1,55 @@ +@inject IStringLocalizer L + + + + @L["Start"] + @L["Home"] + @L["Getting Started"] + @if (_canViewHangfire) + { + @L["Hangfire"] + } + @L["Personal"] + @if (_canViewDashboard) + { + @L["Dashboard"] + } + @L["Account"] + @L["Logs"] + @if (_canViewProducts || _canViewBrands) + { + @L["Management"] + + @if (_canViewProducts) + { + + @L["Products"] + + } + @if (_canViewBrands) + { + + @L["Brands"] + + } + + } + @if (CanViewAdministrationGroup) + { + @L["Administration"] + @if (_canViewUsers) + { + @L["Users"] + } + @if (_canViewRoles) + { + @L["Roles"] + } + @if(_canViewTenants) + { + @L["Tenants"] + } + } + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Shared/NavMenu.razor.cs b/blazor-wasm-boilerplate-main/src/Client/Shared/NavMenu.razor.cs new file mode 100644 index 0000000..7532712 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Shared/NavMenu.razor.cs @@ -0,0 +1,39 @@ +using FSH.BlazorWebAssembly.Client.Infrastructure.Auth; +using FSH.BlazorWebAssembly.Client.Infrastructure.Common; +using FSH.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; + +namespace FSH.BlazorWebAssembly.Client.Shared; + +public partial class NavMenu +{ + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + [Inject] + protected IAuthorizationService AuthService { get; set; } = default!; + + private string? _hangfireUrl; + private bool _canViewHangfire; + private bool _canViewDashboard; + private bool _canViewRoles; + private bool _canViewUsers; + private bool _canViewProducts; + private bool _canViewBrands; + private bool _canViewTenants; + private bool CanViewAdministrationGroup => _canViewUsers || _canViewRoles || _canViewTenants; + + protected override async Task OnParametersSetAsync() + { + _hangfireUrl = Config[ConfigNames.ApiBaseUrl] + "jobs"; + var user = (await AuthState).User; + _canViewHangfire = await AuthService.HasPermissionAsync(user, FSHAction.View, FSHResource.Hangfire); + _canViewDashboard = await AuthService.HasPermissionAsync(user, FSHAction.View, FSHResource.Dashboard); + _canViewRoles = await AuthService.HasPermissionAsync(user, FSHAction.View, FSHResource.Roles); + _canViewUsers = await AuthService.HasPermissionAsync(user, FSHAction.View, FSHResource.Users); + _canViewProducts = await AuthService.HasPermissionAsync(user, FSHAction.View, FSHResource.Products); + _canViewBrands = await AuthService.HasPermissionAsync(user, FSHAction.View, FSHResource.Brands); + _canViewTenants = await AuthService.HasPermissionAsync(user, FSHAction.View, FSHResource.Tenants); + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Shared/NotFound.razor b/blazor-wasm-boilerplate-main/src/Client/Shared/NotFound.razor new file mode 100644 index 0000000..98c36fd --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Shared/NotFound.razor @@ -0,0 +1,56 @@ +@using Infrastructure.Theme +@inherits LayoutComponentBase + + + + +
+ + + + + + + + + + + + + + + + + Not Found + +
+ Go Home +
+
+
+
+ +@code { + private MudTheme _currentTheme = new LightTheme(); + + protected override async Task OnInitializedAsync() + { + _currentTheme = new LightTheme(); + _currentTheme = await ClientPreferences.GetCurrentThemeAsync(); + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/Shared/SharedResource.cs b/blazor-wasm-boilerplate-main/src/Client/Shared/SharedResource.cs new file mode 100644 index 0000000..7e35167 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/Shared/SharedResource.cs @@ -0,0 +1,5 @@ +namespace FSH.BlazorWebAssembly.Client.Shared; + +public class SharedResource +{ +} diff --git a/blazor-wasm-boilerplate-main/src/Client/_Imports.razor b/blazor-wasm-boilerplate-main/src/Client/_Imports.razor new file mode 100644 index 0000000..a5697e7 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/_Imports.razor @@ -0,0 +1,42 @@ +@using System.Security.Claims +@using Microsoft.AspNetCore.Authorization +@using Microsoft.AspNetCore.Components +@using Microsoft.AspNetCore.Components.Authorization +@using Microsoft.AspNetCore.Components.Forms +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.Web.Virtualization +@using Microsoft.AspNetCore.Components.WebAssembly.Authentication +@using Microsoft.AspNetCore.Components.WebAssembly.Http +@using Microsoft.AspNetCore.WebUtilities +@using Microsoft.Extensions.Configuration +@using Microsoft.Extensions.DependencyInjection +@using Microsoft.Extensions.Localization +@using Microsoft.JSInterop +@using FSH.BlazorWebAssembly.Client +@using FSH.BlazorWebAssembly.Client.Shared +@using FSH.BlazorWebAssembly.Client.Pages.Authentication +@using FSH.BlazorWebAssembly.Client.Pages.Multitenancy +@using FSH.BlazorWebAssembly.Client.Components.Common +@using FSH.BlazorWebAssembly.Client.Components.EntityTable +@using FSH.BlazorWebAssembly.Client.Components.Localization +@using FSH.BlazorWebAssembly.Client.Components.Notifications +@using FSH.BlazorWebAssembly.Client.Components.ThemeManager +@using FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient +@using FSH.BlazorWebAssembly.Client.Infrastructure.Auth +@using FSH.BlazorWebAssembly.Client.Infrastructure.Common +@using FSH.BlazorWebAssembly.Client.Infrastructure.Notifications +@using FSH.BlazorWebAssembly.Client.Infrastructure.Preferences +@using FSH.WebApi.Shared.Authorization +@using Blazored.LocalStorage +@using Mapster +@using MediatR.Courier +@using MudBlazor + +@attribute [Authorize] + +@inject NavigationManager Navigation +@inject ISnackbar Snackbar +@inject IDialogService DialogService +@inject IConfiguration Config +@inject IClientPreferenceManager ClientPreferences \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/wwwroot/appsettings.Development.json b/blazor-wasm-boilerplate-main/src/Client/wwwroot/appsettings.Development.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/wwwroot/appsettings.Development.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/wwwroot/appsettings.json b/blazor-wasm-boilerplate-main/src/Client/wwwroot/appsettings.json new file mode 100644 index 0000000..704cf56 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/wwwroot/appsettings.json @@ -0,0 +1,10 @@ +{ + "ApiBaseUrl": "https://localhost:5001/", + "AuthProvider": "Jwt", + "AzureAd": { + "Authority": "https://login.microsoftonline.com/organizations", + "ClientId": "", + "ValidateAuthority": true, + "ApiScope": "api:///access_as_user" + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/wwwroot/css/fsh.css b/blazor-wasm-boilerplate-main/src/Client/wwwroot/css/fsh.css new file mode 100644 index 0000000..a44b634 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/wwwroot/css/fsh.css @@ -0,0 +1,72 @@ +.fsh-center-text { + text-align: center !important; +} + +.mud-button-filled { + box-shadow: 0 3px 1px -2px rgb(0 0 0 / 30%), 0 2px 2px 0 rgb(0 0 0 / 0), 0 1px 5px 0 rgb(0 0 0 / 10%) !important; +} + +.mud-dialog { + box-shadow: 0 3px 1px -2px rgb(0 0 0 / 10%), 0 2px 2px 0 rgb(0 0 0 / 0), 0 10px 10px 0 rgb(0 0 0 / 5%) !important; +} + +.mud-nav-link { + white-space: normal !important; + padding: 12px 16px 12px 38px; +} + + .mud-nav-link.active:not(.mud-nav-link-disabled) { + border-right: 3px solid var(--mud-palette-primary); + background-color: rgba(var(--mud-palette-primary-rgb), 0.1); + } + +.mud-table { + padding: 20px !important; + margin-bottom: 20px !important; +} + +.mud-card { + margin-bottom: 20px !important; +} + +#blazor-error-ui { + color: var(--mud-palette-drawer-text); + background: var(--mud-palette-drawer-background); +} + +.mud-overlay-dark { + backdrop-filter: blur(2px); +} + +.mud-card-header .mud-card-header-avatar { + margin-inline-end: 10px !important; +} + +.mud-nav-link { + padding: 12px 16px 12px 15px !important; +} + +.mud-dialog-content { + max-height: 75vh !important; + overflow: auto !important; + overflow-x: hidden !important; +} + +.mud-grid-spacing-xs-3 { + margin: 0px !important; + margin-left: -12px !important; +} + +.mud-table-toolbar +{ + flex-wrap:wrap; + margin-bottom:20px!important; +} + +::-webkit-scrollbar { + width: 2px!important; + height: 6px!important; +} +.fsh-nav-child { + padding-left: 10px !important; +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/wwwroot/favicon.ico b/blazor-wasm-boilerplate-main/src/Client/wwwroot/favicon.ico new file mode 100644 index 0000000..fd58c54 Binary files /dev/null and b/blazor-wasm-boilerplate-main/src/Client/wwwroot/favicon.ico differ diff --git a/blazor-wasm-boilerplate-main/src/Client/wwwroot/full-stack-hero-logo.png b/blazor-wasm-boilerplate-main/src/Client/wwwroot/full-stack-hero-logo.png new file mode 100644 index 0000000..05bdf45 Binary files /dev/null and b/blazor-wasm-boilerplate-main/src/Client/wwwroot/full-stack-hero-logo.png differ diff --git a/blazor-wasm-boilerplate-main/src/Client/wwwroot/index.html b/blazor-wasm-boilerplate-main/src/Client/wwwroot/index.html new file mode 100644 index 0000000..cc64e70 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/wwwroot/index.html @@ -0,0 +1,110 @@ + + + + + + + Blazor WebAssembly Boilerplate + + + + + + + + + + + + +
+ + +
+
+
+
+
+ +
+
+
+ +
+ An unhandled error has occurred. + Reload + 🗙 +
+ + + + + + + + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/wwwroot/manifest.json b/blazor-wasm-boilerplate-main/src/Client/wwwroot/manifest.json new file mode 100644 index 0000000..c95abce --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/wwwroot/manifest.json @@ -0,0 +1,21 @@ +{ + "name": "Blazor WebAssembly Boilerplate", + "short_name": "Blazor WebAssembly Boilerplate", + "start_url": "./", + "display": "standalone", + "background_color": "#ffffff", + "theme_color": "#3eaf7c", + "prefer_related_applications": false, + "icons": [ + { + "src": "full-stack-hero-logo.png", + "type": "image/png", + "sizes": "512x512" + }, + { + "src": "full-stack-hero-logo.png", + "type": "image/png", + "sizes": "192x192" + } + ] +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/wwwroot/service-worker.js b/blazor-wasm-boilerplate-main/src/Client/wwwroot/service-worker.js new file mode 100644 index 0000000..0c4fa6b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/wwwroot/service-worker.js @@ -0,0 +1,4 @@ +// In development, always fetch from the network and do not enable offline support. +// This is because caching would make development more difficult (changes would not +// be reflected on the first load after each change). +self.addEventListener('fetch', () => { }); \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Client/wwwroot/service-worker.published.js b/blazor-wasm-boilerplate-main/src/Client/wwwroot/service-worker.published.js new file mode 100644 index 0000000..a88a6e9 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Client/wwwroot/service-worker.published.js @@ -0,0 +1,48 @@ +// Caution! Be sure you understand the caveats before publishing an application with +// offline support. See https://aka.ms/blazor-offline-considerations + +self.importScripts('./service-worker-assets.js'); +self.addEventListener('install', event => event.waitUntil(onInstall(event))); +self.addEventListener('activate', event => event.waitUntil(onActivate(event))); +self.addEventListener('fetch', event => event.respondWith(onFetch(event))); + +const cacheNamePrefix = 'offline-cache-'; +const cacheName = `${cacheNamePrefix}${self.assetsManifest.version}`; +const offlineAssetsInclude = [/\.dll$/, /\.pdb$/, /\.wasm/, /\.html/, /\.js$/, /\.json$/, /\.css$/, /\.woff$/, /\.png$/, /\.jpe?g$/, /\.gif$/, /\.ico$/, /\.blat$/, /\.dat$/]; +const offlineAssetsExclude = [/^service-worker\.js$/]; + +async function onInstall(event) { + console.info('Service worker: Install'); + + // Fetch and cache all matching items from the assets manifest + const assetsRequests = self.assetsManifest.assets + .filter(asset => offlineAssetsInclude.some(pattern => pattern.test(asset.url))) + .filter(asset => !offlineAssetsExclude.some(pattern => pattern.test(asset.url))) + .map(asset => new Request(asset.url, { integrity: asset.hash, cache: 'no-cache' })); + await caches.open(cacheName).then(cache => cache.addAll(assetsRequests)); +} + +async function onActivate(event) { + console.info('Service worker: Activate'); + + // Delete unused caches + const cacheKeys = await caches.keys(); + await Promise.all(cacheKeys + .filter(key => key.startsWith(cacheNamePrefix) && key !== cacheName) + .map(key => caches.delete(key))); +} + +async function onFetch(event) { + let cachedResponse = null; + if (event.request.method === 'GET') { + // For all navigation requests, try to serve index.html from cache + // If you need some URLs to be server-rendered, edit the following check to exclude those URLs + const shouldServeIndexHtml = event.request.mode === 'navigate'; + + const request = shouldServeIndexHtml ? 'index.html' : event.request; + const cache = await caches.open(cacheName); + cachedResponse = await cache.match(request); + } + + return cachedResponse || fetch(event.request); +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Host/Host.csproj b/blazor-wasm-boilerplate-main/src/Host/Host.csproj new file mode 100644 index 0000000..50cd34d --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Host/Host.csproj @@ -0,0 +1,24 @@ + + + + net6.0 + FSH.BlazorWebAssembly.Host + FSH.BlazorWebAssembly.Host + + + + + + + + + + + + + + Always + + + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Host/Pages/Error.cshtml b/blazor-wasm-boilerplate-main/src/Host/Pages/Error.cshtml new file mode 100644 index 0000000..a0863a8 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Host/Pages/Error.cshtml @@ -0,0 +1,44 @@ +@page +@model FSH.BlazorWebAssembly.Server.Pages.ErrorModel + + + + + + + + Error + + + + + +
+
+

Error.

+

An error occurred while processing your request.

+ + @if (Model.ShowRequestId) + { +

+ Request ID: @Model.RequestId +

+ } + +

Development Mode

+

+ Swapping to the Development environment displays detailed information about the error + that occurred. +

+

+ The Development environment shouldn't be enabled for deployed applications. + It can result in displaying sensitive information from exceptions to end users. + For local debugging, enable the Development environment by setting the + ASPNETCORE_ENVIRONMENT environment variable to Development + and restarting the app. +

+
+
+ + + diff --git a/blazor-wasm-boilerplate-main/src/Host/Pages/Error.cshtml.cs b/blazor-wasm-boilerplate-main/src/Host/Pages/Error.cshtml.cs new file mode 100644 index 0000000..863883a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Host/Pages/Error.cshtml.cs @@ -0,0 +1,19 @@ +using System.Diagnostics; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace FSH.BlazorWebAssembly.Server.Pages; + +[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] +[IgnoreAntiforgeryToken] +public class ErrorModel : PageModel +{ + public string? RequestId { get; set; } + + public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); + + public void OnGet() + { + RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Host/Program.cs b/blazor-wasm-boilerplate-main/src/Host/Program.cs new file mode 100644 index 0000000..098865c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Host/Program.cs @@ -0,0 +1,26 @@ +var builder = WebApplication.CreateBuilder(args); +builder.Services.AddControllersWithViews(); +builder.Services.AddRazorPages(); + +var app = builder.Build(); + +if (app.Environment.IsDevelopment()) +{ + app.UseWebAssemblyDebugging(); +} +else +{ + app.UseExceptionHandler("/Error"); + app.UseHsts(); +} + +app.UseHttpsRedirection(); +app.UseBlazorFrameworkFiles(); +app.UseStaticFiles(); +app.UseRouting(); + +app.MapRazorPages(); +app.MapControllers(); +app.MapFallbackToFile("index.html"); + +app.Run(); \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Host/Properties/launchSettings.json b/blazor-wasm-boilerplate-main/src/Host/Properties/launchSettings.json new file mode 100644 index 0000000..a24d289 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Host/Properties/launchSettings.json @@ -0,0 +1,30 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:21716", + "sslPort": 44331 + } + }, + "profiles": { + "FSH.BlazorWebAssembly.Server": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "https://localhost:5002;http://localhost:5003", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Host/appsettings.Development.json b/blazor-wasm-boilerplate-main/src/Host/appsettings.Development.json new file mode 100644 index 0000000..1b2d3ba --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Host/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Host/appsettings.json b/blazor-wasm-boilerplate-main/src/Host/appsettings.json new file mode 100644 index 0000000..ec04bc1 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Host/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Shared/Authorization/ClaimsPrincipalExtensions.cs b/blazor-wasm-boilerplate-main/src/Shared/Authorization/ClaimsPrincipalExtensions.cs new file mode 100644 index 0000000..a0559f6 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Shared/Authorization/ClaimsPrincipalExtensions.cs @@ -0,0 +1,39 @@ +using FSH.WebApi.Shared.Authorization; + +namespace System.Security.Claims; + +public static class ClaimsPrincipalExtensions +{ + public static string? GetEmail(this ClaimsPrincipal principal) + => principal.FindFirstValue(ClaimTypes.Email); + + public static string? GetTenant(this ClaimsPrincipal principal) + => principal.FindFirstValue(FSHClaims.Tenant); + + public static string? GetFullName(this ClaimsPrincipal principal) + => principal?.FindFirst(FSHClaims.Fullname)?.Value; + + public static string? GetFirstName(this ClaimsPrincipal principal) + => principal?.FindFirst(ClaimTypes.Name)?.Value; + + public static string? GetSurname(this ClaimsPrincipal principal) + => principal?.FindFirst(ClaimTypes.Surname)?.Value; + + public static string? GetPhoneNumber(this ClaimsPrincipal principal) + => principal.FindFirstValue(ClaimTypes.MobilePhone); + + public static string? GetUserId(this ClaimsPrincipal principal) + => principal.FindFirstValue(ClaimTypes.NameIdentifier); + + public static string? GetImageUrl(this ClaimsPrincipal principal) + => principal.FindFirstValue(FSHClaims.ImageUrl); + + public static DateTimeOffset GetExpiration(this ClaimsPrincipal principal) => + DateTimeOffset.FromUnixTimeSeconds(Convert.ToInt64( + principal.FindFirstValue(FSHClaims.Expiration))); + + private static string? FindFirstValue(this ClaimsPrincipal principal, string claimType) => + principal is null + ? throw new ArgumentNullException(nameof(principal)) + : principal.FindFirst(claimType)?.Value; +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Shared/Authorization/FSHClaims.cs b/blazor-wasm-boilerplate-main/src/Shared/Authorization/FSHClaims.cs new file mode 100644 index 0000000..a94b26b --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Shared/Authorization/FSHClaims.cs @@ -0,0 +1,11 @@ +namespace FSH.WebApi.Shared.Authorization; + +public static class FSHClaims +{ + public const string Tenant = "tenant"; + public const string Fullname = "fullName"; + public const string Permission = "permission"; + public const string ImageUrl = "image_url"; + public const string IpAddress = "ipAddress"; + public const string Expiration = "exp"; +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Shared/Authorization/FSHPermissions.cs b/blazor-wasm-boilerplate-main/src/Shared/Authorization/FSHPermissions.cs new file mode 100644 index 0000000..229654d --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Shared/Authorization/FSHPermissions.cs @@ -0,0 +1,80 @@ +using System.Collections.ObjectModel; + +namespace FSH.WebApi.Shared.Authorization; + +public static class FSHAction +{ + public const string View = nameof(View); + public const string Search = nameof(Search); + public const string Create = nameof(Create); + public const string Update = nameof(Update); + public const string Delete = nameof(Delete); + public const string Export = nameof(Export); + public const string Generate = nameof(Generate); + public const string Clean = nameof(Clean); + public const string UpgradeSubscription = nameof(UpgradeSubscription); +} + +public static class FSHResource +{ + public const string Tenants = nameof(Tenants); + public const string Dashboard = nameof(Dashboard); + public const string Hangfire = nameof(Hangfire); + public const string Users = nameof(Users); + public const string UserRoles = nameof(UserRoles); + public const string Roles = nameof(Roles); + public const string RoleClaims = nameof(RoleClaims); + public const string Products = nameof(Products); + public const string Brands = nameof(Brands); +} + +public static class FSHPermissions +{ + private static readonly FSHPermission[] _all = new FSHPermission[] + { + new("View Dashboard", FSHAction.View, FSHResource.Dashboard), + new("View Hangfire", FSHAction.View, FSHResource.Hangfire), + new("View Users", FSHAction.View, FSHResource.Users), + new("Search Users", FSHAction.Search, FSHResource.Users), + new("Create Users", FSHAction.Create, FSHResource.Users), + new("Update Users", FSHAction.Update, FSHResource.Users), + new("Delete Users", FSHAction.Delete, FSHResource.Users), + new("Export Users", FSHAction.Export, FSHResource.Users), + new("View UserRoles", FSHAction.View, FSHResource.UserRoles), + new("Update UserRoles", FSHAction.Update, FSHResource.UserRoles), + new("View Roles", FSHAction.View, FSHResource.Roles), + new("Create Roles", FSHAction.Create, FSHResource.Roles), + new("Update Roles", FSHAction.Update, FSHResource.Roles), + new("Delete Roles", FSHAction.Delete, FSHResource.Roles), + new("View RoleClaims", FSHAction.View, FSHResource.RoleClaims), + new("Update RoleClaims", FSHAction.Update, FSHResource.RoleClaims), + new("View Products", FSHAction.View, FSHResource.Products, IsBasic: true), + new("Search Products", FSHAction.Search, FSHResource.Products, IsBasic: true), + new("Create Products", FSHAction.Create, FSHResource.Products), + new("Update Products", FSHAction.Update, FSHResource.Products), + new("Delete Products", FSHAction.Delete, FSHResource.Products), + new("Export Products", FSHAction.Export, FSHResource.Products), + new("View Brands", FSHAction.View, FSHResource.Brands, IsBasic: true), + new("Search Brands", FSHAction.Search, FSHResource.Brands, IsBasic: true), + new("Create Brands", FSHAction.Create, FSHResource.Brands), + new("Update Brands", FSHAction.Update, FSHResource.Brands), + new("Delete Brands", FSHAction.Delete, FSHResource.Brands), + new("Generate Brands", FSHAction.Generate, FSHResource.Brands), + new("Clean Brands", FSHAction.Clean, FSHResource.Brands), + new("View Tenants", FSHAction.View, FSHResource.Tenants, IsRoot: true), + new("Create Tenants", FSHAction.Create, FSHResource.Tenants, IsRoot: true), + new("Update Tenants", FSHAction.Update, FSHResource.Tenants, IsRoot: true), + new("Upgrade Tenant Subscription", FSHAction.UpgradeSubscription, FSHResource.Tenants, IsRoot: true) + }; + + public static IReadOnlyList All { get; } = new ReadOnlyCollection(_all); + public static IReadOnlyList Root { get; } = new ReadOnlyCollection(_all.Where(p => p.IsRoot).ToArray()); + public static IReadOnlyList Admin { get; } = new ReadOnlyCollection(_all.Where(p => !p.IsRoot).ToArray()); + public static IReadOnlyList Basic { get; } = new ReadOnlyCollection(_all.Where(p => p.IsBasic).ToArray()); +} + +public record FSHPermission(string Description, string Action, string Resource, bool IsBasic = false, bool IsRoot = false) +{ + public string Name => NameFor(Action, Resource); + public static string NameFor(string action, string resource) => $"Permissions.{resource}.{action}"; +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Shared/Authorization/FSHRoles.cs b/blazor-wasm-boilerplate-main/src/Shared/Authorization/FSHRoles.cs new file mode 100644 index 0000000..974b07a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Shared/Authorization/FSHRoles.cs @@ -0,0 +1,17 @@ +using System.Collections.ObjectModel; + +namespace FSH.WebApi.Shared.Authorization; + +public static class FSHRoles +{ + public static string Admin = nameof(Admin); + public static string Basic = nameof(Basic); + + public static IReadOnlyList DefaultRoles { get; } = new ReadOnlyCollection(new[] + { + Admin, + Basic + }); + + public static bool IsDefault(string roleName) => DefaultRoles.Any(r => r == roleName); +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Shared/Events/IEvent.cs b/blazor-wasm-boilerplate-main/src/Shared/Events/IEvent.cs new file mode 100644 index 0000000..8dfdf10 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Shared/Events/IEvent.cs @@ -0,0 +1,5 @@ +namespace FSH.WebApi.Shared.Events; + +public interface IEvent +{ +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Shared/MultiTenancy/MultitenancyConstants.cs b/blazor-wasm-boilerplate-main/src/Shared/MultiTenancy/MultitenancyConstants.cs new file mode 100644 index 0000000..8ffd325 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Shared/MultiTenancy/MultitenancyConstants.cs @@ -0,0 +1,15 @@ +namespace FSH.WebApi.Shared.Multitenancy; + +public class MultitenancyConstants +{ + public static class Root + { + public const string Id = "root"; + public const string Name = "Root"; + public const string EmailAddress = "admin@root.com"; + } + + public const string DefaultPassword = "123Pa$$word!"; + + public const string TenantIdName = "tenant"; +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Shared/Notifications/BasicNotification.cs b/blazor-wasm-boilerplate-main/src/Shared/Notifications/BasicNotification.cs new file mode 100644 index 0000000..c90ec4a --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Shared/Notifications/BasicNotification.cs @@ -0,0 +1,15 @@ +namespace FSH.WebApi.Shared.Notifications; + +public class BasicNotification : INotificationMessage +{ + public enum LabelType + { + Information, + Success, + Warning, + Error + } + + public string? Message { get; set; } + public LabelType Label { get; set; } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Shared/Notifications/INotificationMessage.cs b/blazor-wasm-boilerplate-main/src/Shared/Notifications/INotificationMessage.cs new file mode 100644 index 0000000..8374916 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Shared/Notifications/INotificationMessage.cs @@ -0,0 +1,5 @@ +namespace FSH.WebApi.Shared.Notifications; + +public interface INotificationMessage +{ +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Shared/Notifications/JobNotification.cs b/blazor-wasm-boilerplate-main/src/Shared/Notifications/JobNotification.cs new file mode 100644 index 0000000..cbe8658 --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Shared/Notifications/JobNotification.cs @@ -0,0 +1,8 @@ +namespace FSH.WebApi.Shared.Notifications; + +public class JobNotification : INotificationMessage +{ + public string? Message { get; set; } + public string? JobId { get; set; } + public decimal Progress { get; set; } +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Shared/Notifications/NotificationConstants.cs b/blazor-wasm-boilerplate-main/src/Shared/Notifications/NotificationConstants.cs new file mode 100644 index 0000000..f4fc15d --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Shared/Notifications/NotificationConstants.cs @@ -0,0 +1,6 @@ +namespace FSH.WebApi.Shared.Notifications; + +public static class NotificationConstants +{ + public const string NotificationFromServer = nameof(NotificationFromServer); +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Shared/Notifications/StatsChangedNotification.cs b/blazor-wasm-boilerplate-main/src/Shared/Notifications/StatsChangedNotification.cs new file mode 100644 index 0000000..e9ebe9c --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Shared/Notifications/StatsChangedNotification.cs @@ -0,0 +1,5 @@ +namespace FSH.WebApi.Shared.Notifications; + +public class StatsChangedNotification : INotificationMessage +{ +} \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/src/Shared/Shared.csproj b/blazor-wasm-boilerplate-main/src/Shared/Shared.csproj new file mode 100644 index 0000000..72eb13f --- /dev/null +++ b/blazor-wasm-boilerplate-main/src/Shared/Shared.csproj @@ -0,0 +1,7 @@ + + + net6.0 + FSH.WebApi.Shared + FSH.WebApi.Shared + + \ No newline at end of file diff --git a/blazor-wasm-boilerplate-main/stylecop.json b/blazor-wasm-boilerplate-main/stylecop.json new file mode 100644 index 0000000..95ceebe --- /dev/null +++ b/blazor-wasm-boilerplate-main/stylecop.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json", + "settings": { + "orderingRules": { + "systemUsingDirectivesFirst": true, + "usingDirectivesPlacement": "outsideNamespace" + }, + "layoutRules": { + "newlineAtEndOfFile": "omit" + } + } +} \ No newline at end of file diff --git a/dotnet.ruleset b/dotnet.ruleset new file mode 100644 index 0000000..3010e47 --- /dev/null +++ b/dotnet.ruleset @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/global.json b/global.json new file mode 100644 index 0000000..f443bd4 --- /dev/null +++ b/global.json @@ -0,0 +1,7 @@ +{ + "sdk": { + "version": "6.0", + "rollForward": "latestMajor", + "allowPrerelease": true + } +} \ No newline at end of file diff --git a/icon.png b/icon.png new file mode 100644 index 0000000..fd9fa41 Binary files /dev/null and b/icon.png differ diff --git a/scripts/nswag-regen.ps1 b/scripts/nswag-regen.ps1 new file mode 100644 index 0000000..98ccbc4 --- /dev/null +++ b/scripts/nswag-regen.ps1 @@ -0,0 +1,20 @@ +# This script is cross-platform, supporting all OSes that PowerShell Core/7 runs on. + +$currentDirectory = Get-Location +$rootDirectory = git rev-parse --show-toplevel +$hostDirectory = Join-Path -Path $rootDirectory -ChildPath 'src/Host' +$infrastructurePrj = Join-Path -Path $rootDirectory -ChildPath 'src/Client.Infrastructure/Client.Infrastructure.csproj' + +Write-Host "Make sure you have run the RewardsPlus.WebApi project. `n" +Write-Host "Press any key to continue... `n" +$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown'); + +Set-Location -Path $hostDirectory +Write-Host "Host Directory is $hostDirectory `n" + +<# Run command #> +dotnet build -t:NSwag $infrastructurePrj + +Set-Location -Path $currentDirectory +Write-Host -NoNewLine 'NSwag Regenerated. Press any key to continue...'; +$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown'); diff --git a/scripts/pull-shared-from-webapi.ps1 b/scripts/pull-shared-from-webapi.ps1 new file mode 100644 index 0000000..35dd0ab --- /dev/null +++ b/scripts/pull-shared-from-webapi.ps1 @@ -0,0 +1,40 @@ +# This script is cross-platform, supporting all OSes that PowerShell Core/7 runs on. + +$rootDirectory = git rev-parse --show-toplevel +$sourcePath = Join-Path -Path $rootDirectory -ChildPath '..\dotnet-webapi-boilerplate\src\Core\Shared' +$destinationPath = Join-Path -Path $rootDirectory -ChildPath 'src\Shared' + +$excludes = @('bin', 'obj') + +Write-Host "Pull changes from the Fullstackhero WebApi Shared Project" +write-Host "---------------------------------------------------------" +Write-Host + +If ($null -eq $sourcePath) { + Write-Error "Error! The expected path of WebApi Shared Project does not exist: $sourcePath" + Exit 1 +} + +if ($null -eq (Resolve-Path $destinationPath)) { + # Ensure the destination exists + try + { + New-Item -Path $destinationPath -ItemType Directory -ErrorAction Stop | Out-Null + } + catch + { + Write-Error "Error! Unable to create output path \"$destinationPath\"" + Exit 1 + } +} + +Write-Host "WARNING! This will delete everything in the shared project ($($destinationPath | Resolve-Path))" +Write-Host "and then copy over the whole project from the webapi repository ($($sourcePath | Resolve-Path))" +Write-Host +Read-Host -Prompt "Press ENTER to continue" + +Remove-Item -Path "$destinationPath" -Recurse -Force +Copy-Item -Path (Get-Item -Path "$sourcePath" -Exclude $excludes).FullName -Destination "$destinationPath" -Recurse -Force + +Write-Host "Changes have been pulled." +Write-Host \ No newline at end of file diff --git a/src/Client.Infrastructure/ApiClient/FSHApi.cs b/src/Client.Infrastructure/ApiClient/FSHApi.cs new file mode 100644 index 0000000..0e905a4 --- /dev/null +++ b/src/Client.Infrastructure/ApiClient/FSHApi.cs @@ -0,0 +1,6849 @@ +//---------------------- +// +// Generated using the NSwag toolchain v13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org) +// +//---------------------- + +#nullable enable + +#pragma warning disable 108 // Disable "CS0108 '{derivedDto}.ToJson()' hides inherited member '{dtoBase}.ToJson()'. Use the new keyword if hiding was intended." +#pragma warning disable 114 // Disable "CS0114 '{derivedDto}.RaisePropertyChanged(String)' hides inherited member 'dtoBase.RaisePropertyChanged(String)'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword." +#pragma warning disable 472 // Disable "CS0472 The result of the expression is always 'false' since a value of type 'Int32' is never equal to 'null' of type 'Int32?' +#pragma warning disable 1573 // Disable "CS1573 Parameter '...' has no matching param tag in the XML comment for ... +#pragma warning disable 1591 // Disable "CS1591 Missing XML comment for publicly visible type or member ..." +#pragma warning disable 8073 // Disable "CS8073 The result of the expression is always 'false' since a value of type 'T' is never equal to 'null' of type 'T?'" +#pragma warning disable 3016 // Disable "CS3016 Arrays as attribute arguments is not CLS-compliant" +#pragma warning disable 8603 // Disable "CS8603 Possible null reference return" + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient +{ + using System = global::System; + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial interface ITenantsClient : IApiService + { + /// + /// Get a list of all tenants. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetListAsync(); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get a list of all tenants. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetListAsync(System.Threading.CancellationToken cancellationToken); + + /// + /// Create a new tenant. + /// + /// A server side error occurred. + System.Threading.Tasks.Task CreateAsync(CreateTenantRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Create a new tenant. + /// + /// A server side error occurred. + System.Threading.Tasks.Task CreateAsync(CreateTenantRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Get tenant details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetAsync(string? id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get tenant details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetAsync(string? id, System.Threading.CancellationToken cancellationToken); + + /// + /// Activate a tenant. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ActivateAsync(string? id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Activate a tenant. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ActivateAsync(string? id, System.Threading.CancellationToken cancellationToken); + + /// + /// Deactivate a tenant. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeactivateAsync(string? id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Deactivate a tenant. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeactivateAsync(string? id, System.Threading.CancellationToken cancellationToken); + + /// + /// Upgrade a tenant's subscription. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpgradeSubscriptionAsync(string? id, UpgradeSubscriptionRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Upgrade a tenant's subscription. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpgradeSubscriptionAsync(string? id, UpgradeSubscriptionRequest request, System.Threading.CancellationToken cancellationToken); + + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class TenantsClient : ITenantsClient + { + private System.Net.Http.HttpClient _httpClient; + private System.Lazy _settings; + + public TenantsClient(System.Net.Http.HttpClient httpClient) + { + _httpClient = httpClient; + _settings = new System.Lazy(CreateSerializerSettings); + } + + private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() + { + var settings = new Newtonsoft.Json.JsonSerializerSettings(); + UpdateJsonSerializerSettings(settings); + return settings; + } + + protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } + + partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings); + + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url); + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder); + partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response); + + /// + /// Get a list of all tenants. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task> GetListAsync() + { + return GetListAsync(System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get a list of all tenants. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task> GetListAsync(System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/tenants"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync>(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Create a new tenant. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task CreateAsync(CreateTenantRequest request) + { + return CreateAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Create a new tenant. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task CreateAsync(CreateTenantRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/tenants"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get tenant details. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetAsync(string? id) + { + return GetAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get tenant details. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetAsync(string? id, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/tenants/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Activate a tenant. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task ActivateAsync(string? id) + { + return ActivateAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Activate a tenant. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task ActivateAsync(string? id, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/tenants/{id}/activate"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Content = new System.Net.Http.StringContent(string.Empty, System.Text.Encoding.UTF8, "application/json"); + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Deactivate a tenant. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task DeactivateAsync(string? id) + { + return DeactivateAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Deactivate a tenant. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task DeactivateAsync(string? id, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/tenants/{id}/deactivate"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Content = new System.Net.Http.StringContent(string.Empty, System.Text.Encoding.UTF8, "application/json"); + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Upgrade a tenant's subscription. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task UpgradeSubscriptionAsync(string? id, UpgradeSubscriptionRequest request) + { + return UpgradeSubscriptionAsync(id, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Upgrade a tenant's subscription. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task UpgradeSubscriptionAsync(string? id, UpgradeSubscriptionRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/tenants/{id}/upgrade"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + protected struct ObjectResponseResult + { + public ObjectResponseResult(T responseObject, string responseText) + { + this.Object = responseObject; + this.Text = responseText; + } + + public T Object { get; } + + public string Text { get; } + } + + public bool ReadResponseAsString { get; set; } + + protected virtual async System.Threading.Tasks.Task> ReadObjectResponseAsync(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Threading.CancellationToken cancellationToken) + { + if (response == null || response.Content == null) + { + return new ObjectResponseResult(default(T)!, string.Empty); + } + + if (ReadResponseAsString) + { + var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + var typedBody = Newtonsoft.Json.JsonConvert.DeserializeObject(responseText, JsonSerializerSettings); + return new ObjectResponseResult(typedBody!, responseText); + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body string as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, responseText, headers, exception); + } + } + else + { + try + { + using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) + using (var streamReader = new System.IO.StreamReader(responseStream)) + using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(streamReader)) + { + var serializer = Newtonsoft.Json.JsonSerializer.Create(JsonSerializerSettings); + var typedBody = serializer.Deserialize(jsonTextReader); + return new ObjectResponseResult(typedBody!, string.Empty); + } + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body stream as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, string.Empty, headers, exception); + } + } + } + + private string ConvertToString(object? value, System.Globalization.CultureInfo cultureInfo) + { + if (value == null) + { + return ""; + } + + if (value is System.Enum) + { + var name = System.Enum.GetName(value.GetType(), value); + if (name != null) + { + var field = System.Reflection.IntrospectionExtensions.GetTypeInfo(value.GetType()).GetDeclaredField(name); + if (field != null) + { + var attribute = System.Reflection.CustomAttributeExtensions.GetCustomAttribute(field, typeof(System.Runtime.Serialization.EnumMemberAttribute)) + as System.Runtime.Serialization.EnumMemberAttribute; + if (attribute != null) + { + return attribute.Value != null ? attribute.Value : name; + } + } + + var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo)); + return converted == null ? string.Empty : converted; + } + } + else if (value is bool) + { + return System.Convert.ToString((bool)value, cultureInfo).ToLowerInvariant(); + } + else if (value is byte[]) + { + return System.Convert.ToBase64String((byte[]) value); + } + else if (value.GetType().IsArray) + { + var array = System.Linq.Enumerable.OfType((System.Array) value); + return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo))); + } + + var result = System.Convert.ToString(value, cultureInfo); + return result == null ? "" : result; + } + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial interface IRolesClient : IApiService + { + /// + /// Get a list of all roles. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetListAsync(); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get a list of all roles. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetListAsync(System.Threading.CancellationToken cancellationToken); + + /// + /// Create or update a role. + /// + /// A server side error occurred. + System.Threading.Tasks.Task RegisterRoleAsync(CreateOrUpdateRoleRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Create or update a role. + /// + /// A server side error occurred. + System.Threading.Tasks.Task RegisterRoleAsync(CreateOrUpdateRoleRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Get role details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetByIdAsync(string? id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get role details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetByIdAsync(string? id, System.Threading.CancellationToken cancellationToken); + + /// + /// Delete a role. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeleteAsync(string? id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Delete a role. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeleteAsync(string? id, System.Threading.CancellationToken cancellationToken); + + /// + /// Get role details with its permissions. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetByIdWithPermissionsAsync(string? id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get role details with its permissions. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetByIdWithPermissionsAsync(string? id, System.Threading.CancellationToken cancellationToken); + + /// + /// Update a role's permissions. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpdatePermissionsAsync(string? id, UpdateRolePermissionsRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update a role's permissions. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpdatePermissionsAsync(string? id, UpdateRolePermissionsRequest request, System.Threading.CancellationToken cancellationToken); + + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class RolesClient : IRolesClient + { + private System.Net.Http.HttpClient _httpClient; + private System.Lazy _settings; + + public RolesClient(System.Net.Http.HttpClient httpClient) + { + _httpClient = httpClient; + _settings = new System.Lazy(CreateSerializerSettings); + } + + private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() + { + var settings = new Newtonsoft.Json.JsonSerializerSettings(); + UpdateJsonSerializerSettings(settings); + return settings; + } + + protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } + + partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings); + + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url); + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder); + partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response); + + /// + /// Get a list of all roles. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task> GetListAsync() + { + return GetListAsync(System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get a list of all roles. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task> GetListAsync(System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/roles"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync>(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Create or update a role. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task RegisterRoleAsync(CreateOrUpdateRoleRequest request) + { + return RegisterRoleAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Create or update a role. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task RegisterRoleAsync(CreateOrUpdateRoleRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/roles"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get role details. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetByIdAsync(string? id) + { + return GetByIdAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get role details. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetByIdAsync(string? id, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/roles/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Delete a role. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task DeleteAsync(string? id) + { + return DeleteAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Delete a role. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task DeleteAsync(string? id, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/roles/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("DELETE"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get role details with its permissions. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetByIdWithPermissionsAsync(string? id) + { + return GetByIdWithPermissionsAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get role details with its permissions. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetByIdWithPermissionsAsync(string? id, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/roles/{id}/permissions"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Update a role's permissions. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task UpdatePermissionsAsync(string? id, UpdateRolePermissionsRequest request) + { + return UpdatePermissionsAsync(id, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update a role's permissions. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task UpdatePermissionsAsync(string? id, UpdateRolePermissionsRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/roles/{id}/permissions"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("PUT"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + protected struct ObjectResponseResult + { + public ObjectResponseResult(T responseObject, string responseText) + { + this.Object = responseObject; + this.Text = responseText; + } + + public T Object { get; } + + public string Text { get; } + } + + public bool ReadResponseAsString { get; set; } + + protected virtual async System.Threading.Tasks.Task> ReadObjectResponseAsync(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Threading.CancellationToken cancellationToken) + { + if (response == null || response.Content == null) + { + return new ObjectResponseResult(default(T)!, string.Empty); + } + + if (ReadResponseAsString) + { + var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + var typedBody = Newtonsoft.Json.JsonConvert.DeserializeObject(responseText, JsonSerializerSettings); + return new ObjectResponseResult(typedBody!, responseText); + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body string as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, responseText, headers, exception); + } + } + else + { + try + { + using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) + using (var streamReader = new System.IO.StreamReader(responseStream)) + using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(streamReader)) + { + var serializer = Newtonsoft.Json.JsonSerializer.Create(JsonSerializerSettings); + var typedBody = serializer.Deserialize(jsonTextReader); + return new ObjectResponseResult(typedBody!, string.Empty); + } + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body stream as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, string.Empty, headers, exception); + } + } + } + + private string ConvertToString(object? value, System.Globalization.CultureInfo cultureInfo) + { + if (value == null) + { + return ""; + } + + if (value is System.Enum) + { + var name = System.Enum.GetName(value.GetType(), value); + if (name != null) + { + var field = System.Reflection.IntrospectionExtensions.GetTypeInfo(value.GetType()).GetDeclaredField(name); + if (field != null) + { + var attribute = System.Reflection.CustomAttributeExtensions.GetCustomAttribute(field, typeof(System.Runtime.Serialization.EnumMemberAttribute)) + as System.Runtime.Serialization.EnumMemberAttribute; + if (attribute != null) + { + return attribute.Value != null ? attribute.Value : name; + } + } + + var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo)); + return converted == null ? string.Empty : converted; + } + } + else if (value is bool) + { + return System.Convert.ToString((bool)value, cultureInfo).ToLowerInvariant(); + } + else if (value is byte[]) + { + return System.Convert.ToBase64String((byte[]) value); + } + else if (value.GetType().IsArray) + { + var array = System.Linq.Enumerable.OfType((System.Array) value); + return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo))); + } + + var result = System.Convert.ToString(value, cultureInfo); + return result == null ? "" : result; + } + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial interface ITokensClient : IApiService + { + /// + /// Request an access token using credentials. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + System.Threading.Tasks.Task GetTokenAsync(string tenant, TokenRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Request an access token using credentials. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + System.Threading.Tasks.Task GetTokenAsync(string tenant, TokenRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Request an access token using a refresh token. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + System.Threading.Tasks.Task RefreshAsync(string tenant, RefreshTokenRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Request an access token using a refresh token. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + System.Threading.Tasks.Task RefreshAsync(string tenant, RefreshTokenRequest request, System.Threading.CancellationToken cancellationToken); + + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class TokensClient : ITokensClient + { + private System.Net.Http.HttpClient _httpClient; + private System.Lazy _settings; + + public TokensClient(System.Net.Http.HttpClient httpClient) + { + _httpClient = httpClient; + _settings = new System.Lazy(CreateSerializerSettings); + } + + private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() + { + var settings = new Newtonsoft.Json.JsonSerializerSettings(); + UpdateJsonSerializerSettings(settings); + return settings; + } + + protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } + + partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings); + + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url); + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder); + partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response); + + /// + /// Request an access token using credentials. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetTokenAsync(string tenant, TokenRequest request) + { + return GetTokenAsync(tenant, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Request an access token using credentials. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetTokenAsync(string tenant, TokenRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/tokens"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + + if (tenant == null) + throw new System.ArgumentNullException("tenant"); + request_.Headers.TryAddWithoutValidation("tenant", ConvertToString(tenant, System.Globalization.CultureInfo.InvariantCulture)); + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Request an access token using a refresh token. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + public virtual System.Threading.Tasks.Task RefreshAsync(string tenant, RefreshTokenRequest request) + { + return RefreshAsync(tenant, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Request an access token using a refresh token. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task RefreshAsync(string tenant, RefreshTokenRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/tokens/refresh"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + + if (tenant == null) + throw new System.ArgumentNullException("tenant"); + request_.Headers.TryAddWithoutValidation("tenant", ConvertToString(tenant, System.Globalization.CultureInfo.InvariantCulture)); + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + protected struct ObjectResponseResult + { + public ObjectResponseResult(T responseObject, string responseText) + { + this.Object = responseObject; + this.Text = responseText; + } + + public T Object { get; } + + public string Text { get; } + } + + public bool ReadResponseAsString { get; set; } + + protected virtual async System.Threading.Tasks.Task> ReadObjectResponseAsync(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Threading.CancellationToken cancellationToken) + { + if (response == null || response.Content == null) + { + return new ObjectResponseResult(default(T)!, string.Empty); + } + + if (ReadResponseAsString) + { + var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + var typedBody = Newtonsoft.Json.JsonConvert.DeserializeObject(responseText, JsonSerializerSettings); + return new ObjectResponseResult(typedBody!, responseText); + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body string as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, responseText, headers, exception); + } + } + else + { + try + { + using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) + using (var streamReader = new System.IO.StreamReader(responseStream)) + using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(streamReader)) + { + var serializer = Newtonsoft.Json.JsonSerializer.Create(JsonSerializerSettings); + var typedBody = serializer.Deserialize(jsonTextReader); + return new ObjectResponseResult(typedBody!, string.Empty); + } + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body stream as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, string.Empty, headers, exception); + } + } + } + + private string ConvertToString(object? value, System.Globalization.CultureInfo cultureInfo) + { + if (value == null) + { + return ""; + } + + if (value is System.Enum) + { + var name = System.Enum.GetName(value.GetType(), value); + if (name != null) + { + var field = System.Reflection.IntrospectionExtensions.GetTypeInfo(value.GetType()).GetDeclaredField(name); + if (field != null) + { + var attribute = System.Reflection.CustomAttributeExtensions.GetCustomAttribute(field, typeof(System.Runtime.Serialization.EnumMemberAttribute)) + as System.Runtime.Serialization.EnumMemberAttribute; + if (attribute != null) + { + return attribute.Value != null ? attribute.Value : name; + } + } + + var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo)); + return converted == null ? string.Empty : converted; + } + } + else if (value is bool) + { + return System.Convert.ToString((bool)value, cultureInfo).ToLowerInvariant(); + } + else if (value is byte[]) + { + return System.Convert.ToBase64String((byte[]) value); + } + else if (value.GetType().IsArray) + { + var array = System.Linq.Enumerable.OfType((System.Array) value); + return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo))); + } + + var result = System.Convert.ToString(value, cultureInfo); + return result == null ? "" : result; + } + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial interface IUsersClient : IApiService + { + /// + /// Get list of all users. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetListAsync(); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get list of all users. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetListAsync(System.Threading.CancellationToken cancellationToken); + + /// + /// Creates a new user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task CreateAsync(CreateUserRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Creates a new user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task CreateAsync(CreateUserRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Get a user's details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetByIdAsync(string? id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get a user's details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetByIdAsync(string? id, System.Threading.CancellationToken cancellationToken); + + /// + /// Get a user's roles. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetRolesAsync(string? id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get a user's roles. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetRolesAsync(string? id, System.Threading.CancellationToken cancellationToken); + + /// + /// Update a user's assigned roles. + /// + /// A server side error occurred. + System.Threading.Tasks.Task AssignRolesAsync(string? id, UserRolesRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update a user's assigned roles. + /// + /// A server side error occurred. + System.Threading.Tasks.Task AssignRolesAsync(string? id, UserRolesRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Anonymous user creates a user. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + System.Threading.Tasks.Task SelfRegisterAsync(string tenant, CreateUserRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Anonymous user creates a user. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + System.Threading.Tasks.Task SelfRegisterAsync(string tenant, CreateUserRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Toggle a user's active status. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ToggleStatusAsync(string? id, ToggleUserStatusRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Toggle a user's active status. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ToggleStatusAsync(string? id, ToggleUserStatusRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Confirm email address for a user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ConfirmEmailAsync(string? tenant, string? userId, string? code); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Confirm email address for a user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ConfirmEmailAsync(string? tenant, string? userId, string? code, System.Threading.CancellationToken cancellationToken); + + /// + /// Confirm phone number for a user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ConfirmPhoneNumberAsync(string? userId, string? code); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Confirm phone number for a user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ConfirmPhoneNumberAsync(string? userId, string? code, System.Threading.CancellationToken cancellationToken); + + /// + /// Request a pasword reset email for a user. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + System.Threading.Tasks.Task ForgotPasswordAsync(string tenant, ForgotPasswordRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Request a pasword reset email for a user. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + System.Threading.Tasks.Task ForgotPasswordAsync(string tenant, ForgotPasswordRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Reset a user's password. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ResetPasswordAsync(ResetPasswordRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Reset a user's password. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ResetPasswordAsync(ResetPasswordRequest request, System.Threading.CancellationToken cancellationToken); + + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UsersClient : IUsersClient + { + private System.Net.Http.HttpClient _httpClient; + private System.Lazy _settings; + + public UsersClient(System.Net.Http.HttpClient httpClient) + { + _httpClient = httpClient; + _settings = new System.Lazy(CreateSerializerSettings); + } + + private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() + { + var settings = new Newtonsoft.Json.JsonSerializerSettings(); + UpdateJsonSerializerSettings(settings); + return settings; + } + + protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } + + partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings); + + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url); + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder); + partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response); + + /// + /// Get list of all users. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task> GetListAsync() + { + return GetListAsync(System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get list of all users. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task> GetListAsync(System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync>(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Creates a new user. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task CreateAsync(CreateUserRequest request) + { + return CreateAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Creates a new user. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task CreateAsync(CreateUserRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get a user's details. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetByIdAsync(string? id) + { + return GetByIdAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get a user's details. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetByIdAsync(string? id, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get a user's roles. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task> GetRolesAsync(string? id) + { + return GetRolesAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get a user's roles. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task> GetRolesAsync(string? id, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users/{id}/roles"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync>(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Update a user's assigned roles. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task AssignRolesAsync(string? id, UserRolesRequest request) + { + return AssignRolesAsync(id, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update a user's assigned roles. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task AssignRolesAsync(string? id, UserRolesRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users/{id}/roles"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Anonymous user creates a user. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + public virtual System.Threading.Tasks.Task SelfRegisterAsync(string tenant, CreateUserRequest request) + { + return SelfRegisterAsync(tenant, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Anonymous user creates a user. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task SelfRegisterAsync(string tenant, CreateUserRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users/self-register"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + + if (tenant == null) + throw new System.ArgumentNullException("tenant"); + request_.Headers.TryAddWithoutValidation("tenant", ConvertToString(tenant, System.Globalization.CultureInfo.InvariantCulture)); + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Toggle a user's active status. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task ToggleStatusAsync(string? id, ToggleUserStatusRequest request) + { + return ToggleStatusAsync(id, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Toggle a user's active status. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task ToggleStatusAsync(string? id, ToggleUserStatusRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users/{id}/toggle-status"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + return; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Confirm email address for a user. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task ConfirmEmailAsync(string? tenant, string? userId, string? code) + { + return ConfirmEmailAsync(tenant, userId, code, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Confirm email address for a user. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task ConfirmEmailAsync(string? tenant, string? userId, string? code, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users/confirm-email?"); + if (tenant != null) + { + urlBuilder_.Append(System.Uri.EscapeDataString("tenant") + "=").Append(System.Uri.EscapeDataString(ConvertToString(tenant, System.Globalization.CultureInfo.InvariantCulture))).Append("&"); + } + if (userId != null) + { + urlBuilder_.Append(System.Uri.EscapeDataString("userId") + "=").Append(System.Uri.EscapeDataString(ConvertToString(userId, System.Globalization.CultureInfo.InvariantCulture))).Append("&"); + } + if (code != null) + { + urlBuilder_.Append(System.Uri.EscapeDataString("code") + "=").Append(System.Uri.EscapeDataString(ConvertToString(code, System.Globalization.CultureInfo.InvariantCulture))).Append("&"); + } + urlBuilder_.Length--; + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Confirm phone number for a user. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task ConfirmPhoneNumberAsync(string? userId, string? code) + { + return ConfirmPhoneNumberAsync(userId, code, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Confirm phone number for a user. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task ConfirmPhoneNumberAsync(string? userId, string? code, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users/confirm-phone-number?"); + if (userId != null) + { + urlBuilder_.Append(System.Uri.EscapeDataString("userId") + "=").Append(System.Uri.EscapeDataString(ConvertToString(userId, System.Globalization.CultureInfo.InvariantCulture))).Append("&"); + } + if (code != null) + { + urlBuilder_.Append(System.Uri.EscapeDataString("code") + "=").Append(System.Uri.EscapeDataString(ConvertToString(code, System.Globalization.CultureInfo.InvariantCulture))).Append("&"); + } + urlBuilder_.Length--; + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Request a pasword reset email for a user. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + public virtual System.Threading.Tasks.Task ForgotPasswordAsync(string tenant, ForgotPasswordRequest request) + { + return ForgotPasswordAsync(tenant, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Request a pasword reset email for a user. + /// + /// Input your tenant Id to access this API + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task ForgotPasswordAsync(string tenant, ForgotPasswordRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users/forgot-password"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + + if (tenant == null) + throw new System.ArgumentNullException("tenant"); + request_.Headers.TryAddWithoutValidation("tenant", ConvertToString(tenant, System.Globalization.CultureInfo.InvariantCulture)); + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Reset a user's password. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task ResetPasswordAsync(ResetPasswordRequest request) + { + return ResetPasswordAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Reset a user's password. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task ResetPasswordAsync(ResetPasswordRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/users/reset-password"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + protected struct ObjectResponseResult + { + public ObjectResponseResult(T responseObject, string responseText) + { + this.Object = responseObject; + this.Text = responseText; + } + + public T Object { get; } + + public string Text { get; } + } + + public bool ReadResponseAsString { get; set; } + + protected virtual async System.Threading.Tasks.Task> ReadObjectResponseAsync(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Threading.CancellationToken cancellationToken) + { + if (response == null || response.Content == null) + { + return new ObjectResponseResult(default(T)!, string.Empty); + } + + if (ReadResponseAsString) + { + var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + var typedBody = Newtonsoft.Json.JsonConvert.DeserializeObject(responseText, JsonSerializerSettings); + return new ObjectResponseResult(typedBody!, responseText); + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body string as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, responseText, headers, exception); + } + } + else + { + try + { + using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) + using (var streamReader = new System.IO.StreamReader(responseStream)) + using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(streamReader)) + { + var serializer = Newtonsoft.Json.JsonSerializer.Create(JsonSerializerSettings); + var typedBody = serializer.Deserialize(jsonTextReader); + return new ObjectResponseResult(typedBody!, string.Empty); + } + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body stream as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, string.Empty, headers, exception); + } + } + } + + private string ConvertToString(object? value, System.Globalization.CultureInfo cultureInfo) + { + if (value == null) + { + return ""; + } + + if (value is System.Enum) + { + var name = System.Enum.GetName(value.GetType(), value); + if (name != null) + { + var field = System.Reflection.IntrospectionExtensions.GetTypeInfo(value.GetType()).GetDeclaredField(name); + if (field != null) + { + var attribute = System.Reflection.CustomAttributeExtensions.GetCustomAttribute(field, typeof(System.Runtime.Serialization.EnumMemberAttribute)) + as System.Runtime.Serialization.EnumMemberAttribute; + if (attribute != null) + { + return attribute.Value != null ? attribute.Value : name; + } + } + + var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo)); + return converted == null ? string.Empty : converted; + } + } + else if (value is bool) + { + return System.Convert.ToString((bool)value, cultureInfo).ToLowerInvariant(); + } + else if (value is byte[]) + { + return System.Convert.ToBase64String((byte[]) value); + } + else if (value.GetType().IsArray) + { + var array = System.Linq.Enumerable.OfType((System.Array) value); + return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo))); + } + + var result = System.Convert.ToString(value, cultureInfo); + return result == null ? "" : result; + } + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial interface IPersonalClient : IApiService + { + /// + /// Get profile details of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetProfileAsync(); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get profile details of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetProfileAsync(System.Threading.CancellationToken cancellationToken); + + /// + /// Update profile details of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpdateProfileAsync(UpdateUserRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update profile details of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpdateProfileAsync(UpdateUserRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Change password of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ChangePasswordAsync(ChangePasswordRequest model); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Change password of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ChangePasswordAsync(ChangePasswordRequest model, System.Threading.CancellationToken cancellationToken); + + /// + /// Get permissions of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetPermissionsAsync(); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get permissions of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetPermissionsAsync(System.Threading.CancellationToken cancellationToken); + + /// + /// Get audit logs of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetLogsAsync(); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get audit logs of currently logged in user. + /// + /// A server side error occurred. + System.Threading.Tasks.Task> GetLogsAsync(System.Threading.CancellationToken cancellationToken); + + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class PersonalClient : IPersonalClient + { + private System.Net.Http.HttpClient _httpClient; + private System.Lazy _settings; + + public PersonalClient(System.Net.Http.HttpClient httpClient) + { + _httpClient = httpClient; + _settings = new System.Lazy(CreateSerializerSettings); + } + + private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() + { + var settings = new Newtonsoft.Json.JsonSerializerSettings(); + UpdateJsonSerializerSettings(settings); + return settings; + } + + protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } + + partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings); + + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url); + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder); + partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response); + + /// + /// Get profile details of currently logged in user. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetProfileAsync() + { + return GetProfileAsync(System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get profile details of currently logged in user. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetProfileAsync(System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/personal/profile"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Update profile details of currently logged in user. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task UpdateProfileAsync(UpdateUserRequest request) + { + return UpdateProfileAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update profile details of currently logged in user. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task UpdateProfileAsync(UpdateUserRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/personal/profile"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("PUT"); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + return; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Change password of currently logged in user. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task ChangePasswordAsync(ChangePasswordRequest model) + { + return ChangePasswordAsync(model, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Change password of currently logged in user. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task ChangePasswordAsync(ChangePasswordRequest model, System.Threading.CancellationToken cancellationToken) + { + if (model == null) + throw new System.ArgumentNullException("model"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/personal/change-password"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(model, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("PUT"); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + return; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get permissions of currently logged in user. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task> GetPermissionsAsync() + { + return GetPermissionsAsync(System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get permissions of currently logged in user. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task> GetPermissionsAsync(System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/personal/permissions"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync>(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get audit logs of currently logged in user. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task> GetLogsAsync() + { + return GetLogsAsync(System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get audit logs of currently logged in user. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task> GetLogsAsync(System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/personal/logs"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync>(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + protected struct ObjectResponseResult + { + public ObjectResponseResult(T responseObject, string responseText) + { + this.Object = responseObject; + this.Text = responseText; + } + + public T Object { get; } + + public string Text { get; } + } + + public bool ReadResponseAsString { get; set; } + + protected virtual async System.Threading.Tasks.Task> ReadObjectResponseAsync(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Threading.CancellationToken cancellationToken) + { + if (response == null || response.Content == null) + { + return new ObjectResponseResult(default(T)!, string.Empty); + } + + if (ReadResponseAsString) + { + var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + var typedBody = Newtonsoft.Json.JsonConvert.DeserializeObject(responseText, JsonSerializerSettings); + return new ObjectResponseResult(typedBody!, responseText); + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body string as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, responseText, headers, exception); + } + } + else + { + try + { + using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) + using (var streamReader = new System.IO.StreamReader(responseStream)) + using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(streamReader)) + { + var serializer = Newtonsoft.Json.JsonSerializer.Create(JsonSerializerSettings); + var typedBody = serializer.Deserialize(jsonTextReader); + return new ObjectResponseResult(typedBody!, string.Empty); + } + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body stream as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, string.Empty, headers, exception); + } + } + } + + private string ConvertToString(object? value, System.Globalization.CultureInfo cultureInfo) + { + if (value == null) + { + return ""; + } + + if (value is System.Enum) + { + var name = System.Enum.GetName(value.GetType(), value); + if (name != null) + { + var field = System.Reflection.IntrospectionExtensions.GetTypeInfo(value.GetType()).GetDeclaredField(name); + if (field != null) + { + var attribute = System.Reflection.CustomAttributeExtensions.GetCustomAttribute(field, typeof(System.Runtime.Serialization.EnumMemberAttribute)) + as System.Runtime.Serialization.EnumMemberAttribute; + if (attribute != null) + { + return attribute.Value != null ? attribute.Value : name; + } + } + + var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo)); + return converted == null ? string.Empty : converted; + } + } + else if (value is bool) + { + return System.Convert.ToString((bool)value, cultureInfo).ToLowerInvariant(); + } + else if (value is byte[]) + { + return System.Convert.ToBase64String((byte[]) value); + } + else if (value.GetType().IsArray) + { + var array = System.Linq.Enumerable.OfType((System.Array) value); + return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo))); + } + + var result = System.Convert.ToString(value, cultureInfo); + return result == null ? "" : result; + } + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial interface IDashboardClient : IApiService + { + /// + /// Get statistics for the dashboard. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetAsync(); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get statistics for the dashboard. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetAsync(System.Threading.CancellationToken cancellationToken); + + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class DashboardClient : IDashboardClient + { + private System.Net.Http.HttpClient _httpClient; + private System.Lazy _settings; + + public DashboardClient(System.Net.Http.HttpClient httpClient) + { + _httpClient = httpClient; + _settings = new System.Lazy(CreateSerializerSettings); + } + + private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() + { + var settings = new Newtonsoft.Json.JsonSerializerSettings(); + UpdateJsonSerializerSettings(settings); + return settings; + } + + protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } + + partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings); + + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url); + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder); + partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response); + + /// + /// Get statistics for the dashboard. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetAsync() + { + return GetAsync(System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get statistics for the dashboard. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetAsync(System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/dashboard"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + protected struct ObjectResponseResult + { + public ObjectResponseResult(T responseObject, string responseText) + { + this.Object = responseObject; + this.Text = responseText; + } + + public T Object { get; } + + public string Text { get; } + } + + public bool ReadResponseAsString { get; set; } + + protected virtual async System.Threading.Tasks.Task> ReadObjectResponseAsync(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Threading.CancellationToken cancellationToken) + { + if (response == null || response.Content == null) + { + return new ObjectResponseResult(default(T)!, string.Empty); + } + + if (ReadResponseAsString) + { + var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + var typedBody = Newtonsoft.Json.JsonConvert.DeserializeObject(responseText, JsonSerializerSettings); + return new ObjectResponseResult(typedBody!, responseText); + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body string as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, responseText, headers, exception); + } + } + else + { + try + { + using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) + using (var streamReader = new System.IO.StreamReader(responseStream)) + using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(streamReader)) + { + var serializer = Newtonsoft.Json.JsonSerializer.Create(JsonSerializerSettings); + var typedBody = serializer.Deserialize(jsonTextReader); + return new ObjectResponseResult(typedBody!, string.Empty); + } + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body stream as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, string.Empty, headers, exception); + } + } + } + + private string ConvertToString(object? value, System.Globalization.CultureInfo cultureInfo) + { + if (value == null) + { + return ""; + } + + if (value is System.Enum) + { + var name = System.Enum.GetName(value.GetType(), value); + if (name != null) + { + var field = System.Reflection.IntrospectionExtensions.GetTypeInfo(value.GetType()).GetDeclaredField(name); + if (field != null) + { + var attribute = System.Reflection.CustomAttributeExtensions.GetCustomAttribute(field, typeof(System.Runtime.Serialization.EnumMemberAttribute)) + as System.Runtime.Serialization.EnumMemberAttribute; + if (attribute != null) + { + return attribute.Value != null ? attribute.Value : name; + } + } + + var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo)); + return converted == null ? string.Empty : converted; + } + } + else if (value is bool) + { + return System.Convert.ToString((bool)value, cultureInfo).ToLowerInvariant(); + } + else if (value is byte[]) + { + return System.Convert.ToBase64String((byte[]) value); + } + else if (value.GetType().IsArray) + { + var array = System.Linq.Enumerable.OfType((System.Array) value); + return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo))); + } + + var result = System.Convert.ToString(value, cultureInfo); + return result == null ? "" : result; + } + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial interface IBrandsClient : IApiService + { + /// + /// Search brands using available filters. + /// + /// A server side error occurred. + System.Threading.Tasks.Task SearchAsync(SearchBrandsRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Search brands using available filters. + /// + /// A server side error occurred. + System.Threading.Tasks.Task SearchAsync(SearchBrandsRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Get brand details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetAsync(System.Guid id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get brand details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetAsync(System.Guid id, System.Threading.CancellationToken cancellationToken); + + /// + /// Update a brand. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpdateAsync(System.Guid id, UpdateBrandRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update a brand. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpdateAsync(System.Guid id, UpdateBrandRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Delete a brand. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeleteAsync(System.Guid id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Delete a brand. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeleteAsync(System.Guid id, System.Threading.CancellationToken cancellationToken); + + /// + /// Create a new brand. + /// + /// A server side error occurred. + System.Threading.Tasks.Task CreateAsync(CreateBrandRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Create a new brand. + /// + /// A server side error occurred. + System.Threading.Tasks.Task CreateAsync(CreateBrandRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Generate a number of random brands. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GenerateRandomAsync(GenerateRandomBrandRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Generate a number of random brands. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GenerateRandomAsync(GenerateRandomBrandRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Delete the brands generated with the generate-random call. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeleteRandomAsync(); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Delete the brands generated with the generate-random call. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeleteRandomAsync(System.Threading.CancellationToken cancellationToken); + + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class BrandsClient : IBrandsClient + { + private System.Net.Http.HttpClient _httpClient; + private System.Lazy _settings; + + public BrandsClient(System.Net.Http.HttpClient httpClient) + { + _httpClient = httpClient; + _settings = new System.Lazy(CreateSerializerSettings); + } + + private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() + { + var settings = new Newtonsoft.Json.JsonSerializerSettings(); + UpdateJsonSerializerSettings(settings); + return settings; + } + + protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } + + partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings); + + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url); + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder); + partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response); + + /// + /// Search brands using available filters. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task SearchAsync(SearchBrandsRequest request) + { + return SearchAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Search brands using available filters. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task SearchAsync(SearchBrandsRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/brands/search"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get brand details. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetAsync(System.Guid id) + { + return GetAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get brand details. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetAsync(System.Guid id, System.Threading.CancellationToken cancellationToken) + { + if (id == null) + throw new System.ArgumentNullException("id"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/brands/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Update a brand. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task UpdateAsync(System.Guid id, UpdateBrandRequest request) + { + return UpdateAsync(id, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update a brand. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task UpdateAsync(System.Guid id, UpdateBrandRequest request, System.Threading.CancellationToken cancellationToken) + { + if (id == null) + throw new System.ArgumentNullException("id"); + + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/brands/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("PUT"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Delete a brand. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task DeleteAsync(System.Guid id) + { + return DeleteAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Delete a brand. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task DeleteAsync(System.Guid id, System.Threading.CancellationToken cancellationToken) + { + if (id == null) + throw new System.ArgumentNullException("id"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/brands/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("DELETE"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Create a new brand. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task CreateAsync(CreateBrandRequest request) + { + return CreateAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Create a new brand. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task CreateAsync(CreateBrandRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/brands"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Generate a number of random brands. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GenerateRandomAsync(GenerateRandomBrandRequest request) + { + return GenerateRandomAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Generate a number of random brands. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GenerateRandomAsync(GenerateRandomBrandRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/brands/generate-random"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Delete the brands generated with the generate-random call. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task DeleteRandomAsync() + { + return DeleteRandomAsync(System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Delete the brands generated with the generate-random call. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task DeleteRandomAsync(System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/brands/delete-random"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("DELETE"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + protected struct ObjectResponseResult + { + public ObjectResponseResult(T responseObject, string responseText) + { + this.Object = responseObject; + this.Text = responseText; + } + + public T Object { get; } + + public string Text { get; } + } + + public bool ReadResponseAsString { get; set; } + + protected virtual async System.Threading.Tasks.Task> ReadObjectResponseAsync(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Threading.CancellationToken cancellationToken) + { + if (response == null || response.Content == null) + { + return new ObjectResponseResult(default(T)!, string.Empty); + } + + if (ReadResponseAsString) + { + var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + var typedBody = Newtonsoft.Json.JsonConvert.DeserializeObject(responseText, JsonSerializerSettings); + return new ObjectResponseResult(typedBody!, responseText); + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body string as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, responseText, headers, exception); + } + } + else + { + try + { + using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) + using (var streamReader = new System.IO.StreamReader(responseStream)) + using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(streamReader)) + { + var serializer = Newtonsoft.Json.JsonSerializer.Create(JsonSerializerSettings); + var typedBody = serializer.Deserialize(jsonTextReader); + return new ObjectResponseResult(typedBody!, string.Empty); + } + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body stream as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, string.Empty, headers, exception); + } + } + } + + private string ConvertToString(object? value, System.Globalization.CultureInfo cultureInfo) + { + if (value == null) + { + return ""; + } + + if (value is System.Enum) + { + var name = System.Enum.GetName(value.GetType(), value); + if (name != null) + { + var field = System.Reflection.IntrospectionExtensions.GetTypeInfo(value.GetType()).GetDeclaredField(name); + if (field != null) + { + var attribute = System.Reflection.CustomAttributeExtensions.GetCustomAttribute(field, typeof(System.Runtime.Serialization.EnumMemberAttribute)) + as System.Runtime.Serialization.EnumMemberAttribute; + if (attribute != null) + { + return attribute.Value != null ? attribute.Value : name; + } + } + + var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo)); + return converted == null ? string.Empty : converted; + } + } + else if (value is bool) + { + return System.Convert.ToString((bool)value, cultureInfo).ToLowerInvariant(); + } + else if (value is byte[]) + { + return System.Convert.ToBase64String((byte[]) value); + } + else if (value.GetType().IsArray) + { + var array = System.Linq.Enumerable.OfType((System.Array) value); + return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo))); + } + + var result = System.Convert.ToString(value, cultureInfo); + return result == null ? "" : result; + } + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial interface IProductsClient : IApiService + { + /// + /// Search products using available filters. + /// + /// A server side error occurred. + System.Threading.Tasks.Task SearchAsync(SearchProductsRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Search products using available filters. + /// + /// A server side error occurred. + System.Threading.Tasks.Task SearchAsync(SearchProductsRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Get product details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetAsync(System.Guid id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get product details. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetAsync(System.Guid id, System.Threading.CancellationToken cancellationToken); + + /// + /// Update a product. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpdateAsync(System.Guid id, UpdateProductRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update a product. + /// + /// A server side error occurred. + System.Threading.Tasks.Task UpdateAsync(System.Guid id, UpdateProductRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Delete a product. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeleteAsync(System.Guid id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Delete a product. + /// + /// A server side error occurred. + System.Threading.Tasks.Task DeleteAsync(System.Guid id, System.Threading.CancellationToken cancellationToken); + + /// + /// Get product details via dapper. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetDapperAsync(System.Guid? id); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get product details via dapper. + /// + /// A server side error occurred. + System.Threading.Tasks.Task GetDapperAsync(System.Guid? id, System.Threading.CancellationToken cancellationToken); + + /// + /// Create a new product. + /// + /// A server side error occurred. + System.Threading.Tasks.Task CreateAsync(CreateProductRequest request); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Create a new product. + /// + /// A server side error occurred. + System.Threading.Tasks.Task CreateAsync(CreateProductRequest request, System.Threading.CancellationToken cancellationToken); + + /// + /// Export a products. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ExportAsync(ExportProductsRequest filter); + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Export a products. + /// + /// A server side error occurred. + System.Threading.Tasks.Task ExportAsync(ExportProductsRequest filter, System.Threading.CancellationToken cancellationToken); + + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ProductsClient : IProductsClient + { + private System.Net.Http.HttpClient _httpClient; + private System.Lazy _settings; + + public ProductsClient(System.Net.Http.HttpClient httpClient) + { + _httpClient = httpClient; + _settings = new System.Lazy(CreateSerializerSettings); + } + + private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() + { + var settings = new Newtonsoft.Json.JsonSerializerSettings(); + UpdateJsonSerializerSettings(settings); + return settings; + } + + protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } + + partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings); + + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url); + partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder); + partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response); + + /// + /// Search products using available filters. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task SearchAsync(SearchProductsRequest request) + { + return SearchAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Search products using available filters. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task SearchAsync(SearchProductsRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/products/search"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get product details. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetAsync(System.Guid id) + { + return GetAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get product details. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetAsync(System.Guid id, System.Threading.CancellationToken cancellationToken) + { + if (id == null) + throw new System.ArgumentNullException("id"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/products/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Update a product. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task UpdateAsync(System.Guid id, UpdateProductRequest request) + { + return UpdateAsync(id, request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Update a product. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task UpdateAsync(System.Guid id, UpdateProductRequest request, System.Threading.CancellationToken cancellationToken) + { + if (id == null) + throw new System.ArgumentNullException("id"); + + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/products/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("PUT"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Delete a product. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task DeleteAsync(System.Guid id) + { + return DeleteAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Delete a product. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task DeleteAsync(System.Guid id, System.Threading.CancellationToken cancellationToken) + { + if (id == null) + throw new System.ArgumentNullException("id"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/products/{id}"); + urlBuilder_.Replace("{id}", System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("DELETE"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Get product details via dapper. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task GetDapperAsync(System.Guid? id) + { + return GetDapperAsync(id, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Get product details via dapper. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task GetDapperAsync(System.Guid? id, System.Threading.CancellationToken cancellationToken) + { + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/products/dapper?"); + if (id != null) + { + urlBuilder_.Append(System.Uri.EscapeDataString("id") + "=").Append(System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture))).Append("&"); + } + urlBuilder_.Length--; + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + request_.Method = new System.Net.Http.HttpMethod("GET"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Create a new product. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task CreateAsync(CreateProductRequest request) + { + return CreateAsync(request, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Create a new product. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task CreateAsync(CreateProductRequest request, System.Threading.CancellationToken cancellationToken) + { + if (request == null) + throw new System.ArgumentNullException("request"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/products"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(request, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + return objectResponse_.Object; + } + else + if (status_ == 400) + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + else + { + var objectResponse_ = await ReadObjectResponseAsync(response_, headers_, cancellationToken).ConfigureAwait(false); + if (objectResponse_.Object == null) + { + throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); + } + throw new ApiException("A server side error occurred.", status_, objectResponse_.Text, headers_, objectResponse_.Object, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + /// + /// Export a products. + /// + /// A server side error occurred. + public virtual System.Threading.Tasks.Task ExportAsync(ExportProductsRequest filter) + { + return ExportAsync(filter, System.Threading.CancellationToken.None); + } + + /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. + /// + /// Export a products. + /// + /// A server side error occurred. + public virtual async System.Threading.Tasks.Task ExportAsync(ExportProductsRequest filter, System.Threading.CancellationToken cancellationToken) + { + if (filter == null) + throw new System.ArgumentNullException("filter"); + + var urlBuilder_ = new System.Text.StringBuilder(); + urlBuilder_.Append("api/v1/products/export"); + + var client_ = _httpClient; + var disposeClient_ = false; + try + { + using (var request_ = new System.Net.Http.HttpRequestMessage()) + { + var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(filter, _settings.Value)); + content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); + request_.Content = content_; + request_.Method = new System.Net.Http.HttpMethod("POST"); + request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/octet-stream")); + + PrepareRequest(client_, request_, urlBuilder_); + + var url_ = urlBuilder_.ToString(); + request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); + + PrepareRequest(client_, request_, url_); + + var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); + var disposeResponse_ = true; + try + { + var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); + if (response_.Content != null && response_.Content.Headers != null) + { + foreach (var item_ in response_.Content.Headers) + headers_[item_.Key] = item_.Value; + } + + ProcessResponse(client_, response_); + + var status_ = (int)response_.StatusCode; + if (status_ == 200 || status_ == 206) + { + var responseStream_ = response_.Content == null ? System.IO.Stream.Null : await response_.Content.ReadAsStreamAsync().ConfigureAwait(false); + var fileResponse_ = new FileResponse(status_, headers_, responseStream_, null, response_); + disposeClient_ = false; disposeResponse_ = false; // response and client are disposed by FileResponse + return fileResponse_; + } + else + { + var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false); + throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null); + } + } + finally + { + if (disposeResponse_) + response_.Dispose(); + } + } + } + finally + { + if (disposeClient_) + client_.Dispose(); + } + } + + protected struct ObjectResponseResult + { + public ObjectResponseResult(T responseObject, string responseText) + { + this.Object = responseObject; + this.Text = responseText; + } + + public T Object { get; } + + public string Text { get; } + } + + public bool ReadResponseAsString { get; set; } + + protected virtual async System.Threading.Tasks.Task> ReadObjectResponseAsync(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Threading.CancellationToken cancellationToken) + { + if (response == null || response.Content == null) + { + return new ObjectResponseResult(default(T)!, string.Empty); + } + + if (ReadResponseAsString) + { + var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + var typedBody = Newtonsoft.Json.JsonConvert.DeserializeObject(responseText, JsonSerializerSettings); + return new ObjectResponseResult(typedBody!, responseText); + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body string as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, responseText, headers, exception); + } + } + else + { + try + { + using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) + using (var streamReader = new System.IO.StreamReader(responseStream)) + using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(streamReader)) + { + var serializer = Newtonsoft.Json.JsonSerializer.Create(JsonSerializerSettings); + var typedBody = serializer.Deserialize(jsonTextReader); + return new ObjectResponseResult(typedBody!, string.Empty); + } + } + catch (Newtonsoft.Json.JsonException exception) + { + var message = "Could not deserialize the response body stream as " + typeof(T).FullName + "."; + throw new ApiException(message, (int)response.StatusCode, string.Empty, headers, exception); + } + } + } + + private string ConvertToString(object? value, System.Globalization.CultureInfo cultureInfo) + { + if (value == null) + { + return ""; + } + + if (value is System.Enum) + { + var name = System.Enum.GetName(value.GetType(), value); + if (name != null) + { + var field = System.Reflection.IntrospectionExtensions.GetTypeInfo(value.GetType()).GetDeclaredField(name); + if (field != null) + { + var attribute = System.Reflection.CustomAttributeExtensions.GetCustomAttribute(field, typeof(System.Runtime.Serialization.EnumMemberAttribute)) + as System.Runtime.Serialization.EnumMemberAttribute; + if (attribute != null) + { + return attribute.Value != null ? attribute.Value : name; + } + } + + var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo)); + return converted == null ? string.Empty : converted; + } + } + else if (value is bool) + { + return System.Convert.ToString((bool)value, cultureInfo).ToLowerInvariant(); + } + else if (value is byte[]) + { + return System.Convert.ToBase64String((byte[]) value); + } + else if (value.GetType().IsArray) + { + var array = System.Linq.Enumerable.OfType((System.Array) value); + return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo))); + } + + var result = System.Convert.ToString(value, cultureInfo); + return result == null ? "" : result; + } + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class TenantDto + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("connectionString", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? ConnectionString { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("adminEmail", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string AdminEmail { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("isActive", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool IsActive { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("validUpto", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime ValidUpto { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("issuer", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Issuer { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class HttpValidationProblemDetails : ProblemDetails + { + [Newtonsoft.Json.JsonProperty("errors", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.IDictionary> Errors { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ProblemDetails + { + [Newtonsoft.Json.JsonProperty("type", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Type { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("title", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Title { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("status", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int? Status { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("detail", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Detail { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("instance", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Instance { get; set; } = default!; + + private System.Collections.Generic.IDictionary _additionalProperties = new System.Collections.Generic.Dictionary(); + + [Newtonsoft.Json.JsonExtensionData] + public System.Collections.Generic.IDictionary AdditionalProperties + { + get { return _additionalProperties; } + set { _additionalProperties = value; } + } + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ErrorResult + { + [Newtonsoft.Json.JsonProperty("messages", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection? Messages { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("source", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Source { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("exception", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Exception { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("errorId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? ErrorId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("supportMessage", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? SupportMessage { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("statusCode", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int StatusCode { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class CreateTenantRequest + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("connectionString", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? ConnectionString { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("adminEmail", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.RegularExpression(@"^[^@]+@[^@]+$")] + public string AdminEmail { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("issuer", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Issuer { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UpgradeSubscriptionRequest + { + [Newtonsoft.Json.JsonProperty("tenantId", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string TenantId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("extendedExpiryDate", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime ExtendedExpiryDate { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class RoleDto + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("permissions", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection? Permissions { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UpdateRolePermissionsRequest + { + [Newtonsoft.Json.JsonProperty("roleId", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string RoleId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("permissions", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public System.Collections.Generic.ICollection Permissions { get; set; } = new System.Collections.ObjectModel.Collection(); + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class CreateOrUpdateRoleRequest + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class TokenResponse + { + [Newtonsoft.Json.JsonProperty("token", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Token { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("refreshToken", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string RefreshToken { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("refreshTokenExpiryTime", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime RefreshTokenExpiryTime { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class TokenRequest + { + [Newtonsoft.Json.JsonProperty("email", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.RegularExpression(@"^[^@]+@[^@]+$")] + public string Email { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("password", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string Password { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class RefreshTokenRequest + { + [Newtonsoft.Json.JsonProperty("token", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Token { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("refreshToken", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string RefreshToken { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UserDetailsDto + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("userName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? UserName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("firstName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? FirstName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("lastName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? LastName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("email", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Email { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("isActive", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool IsActive { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("emailConfirmed", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool EmailConfirmed { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("phoneNumber", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? PhoneNumber { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("imageUrl", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? ImageUrl { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UserRoleDto + { + [Newtonsoft.Json.JsonProperty("roleId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? RoleId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("roleName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? RoleName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("enabled", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool Enabled { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UserRolesRequest + { + [Newtonsoft.Json.JsonProperty("userRoles", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection UserRoles { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class CreateUserRequest + { + [Newtonsoft.Json.JsonProperty("firstName", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string FirstName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("lastName", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string LastName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("email", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.RegularExpression(@"^[^@]+@[^@]+$")] + public string Email { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("userName", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string UserName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("password", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string Password { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("confirmPassword", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string ConfirmPassword { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("phoneNumber", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? PhoneNumber { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ToggleUserStatusRequest + { + [Newtonsoft.Json.JsonProperty("activateUser", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool ActivateUser { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("userId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? UserId { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ForgotPasswordRequest + { + [Newtonsoft.Json.JsonProperty("email", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.RegularExpression(@"^[^@]+@[^@]+$")] + public string Email { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ResetPasswordRequest + { + [Newtonsoft.Json.JsonProperty("email", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Email { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("password", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Password { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("token", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Token { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UpdateUserRequest + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("firstName", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(75, MinimumLength = 1)] + public string FirstName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("lastName", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(75, MinimumLength = 1)] + public string LastName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("phoneNumber", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? PhoneNumber { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("email", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.RegularExpression(@"^[^@]+@[^@]+$")] + public string Email { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("image", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public FileUploadRequest? Image { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("deleteCurrentImage", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool DeleteCurrentImage { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class FileUploadRequest + { + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(150, MinimumLength = 1)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("extension", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(5, MinimumLength = 1)] + public string Extension { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("data", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string Data { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ChangePasswordRequest + { + [Newtonsoft.Json.JsonProperty("password", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string Password { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("newPassword", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public string NewPassword { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("confirmNewPassword", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string ConfirmNewPassword { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class AuditDto + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("userId", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid UserId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("type", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Type { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("tableName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? TableName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("dateTime", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime DateTime { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("oldValues", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? OldValues { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("newValues", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? NewValues { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("affectedColumns", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? AffectedColumns { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("primaryKey", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? PrimaryKey { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class StatsDto + { + [Newtonsoft.Json.JsonProperty("productCount", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int ProductCount { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("brandCount", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int BrandCount { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("userCount", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int UserCount { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("roleCount", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int RoleCount { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("dataEnterBarChart", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection DataEnterBarChart { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("productByBrandTypePieChart", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.IDictionary? ProductByBrandTypePieChart { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ChartSeries + { + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("data", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection? Data { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class PaginationResponseOfBrandDto + { + [Newtonsoft.Json.JsonProperty("data", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection Data { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("currentPage", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int CurrentPage { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("totalPages", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int TotalPages { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("totalCount", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int TotalCount { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("pageSize", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int PageSize { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("hasPreviousPage", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool HasPreviousPage { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("hasNextPage", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool HasNextPage { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class BrandDto + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class SearchBrandsRequest : PaginationFilter + { + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class PaginationFilter : BaseFilter + { + [Newtonsoft.Json.JsonProperty("pageNumber", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int PageNumber { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("pageSize", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int PageSize { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("orderBy", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection? OrderBy { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class BaseFilter + { + /// + /// Column Wise Search is Supported. + /// + [Newtonsoft.Json.JsonProperty("advancedSearch", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public Search? AdvancedSearch { get; set; } = default!; + + /// + /// Keyword to Search in All the available columns of the Resource. + /// + [Newtonsoft.Json.JsonProperty("keyword", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Keyword { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class Search + { + [Newtonsoft.Json.JsonProperty("fields", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection Fields { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("keyword", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Keyword { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class CreateBrandRequest + { + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(75, MinimumLength = 1)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UpdateBrandRequest + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(75, MinimumLength = 1)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class GenerateRandomBrandRequest + { + [Newtonsoft.Json.JsonProperty("nSeed", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int NSeed { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class PaginationResponseOfProductDto + { + [Newtonsoft.Json.JsonProperty("data", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.ICollection Data { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("currentPage", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int CurrentPage { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("totalPages", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int TotalPages { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("totalCount", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int TotalCount { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("pageSize", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int PageSize { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("hasPreviousPage", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool HasPreviousPage { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("hasNextPage", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool HasNextPage { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ProductDto + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("rate", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public decimal Rate { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("imagePath", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? ImagePath { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("brandId", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid BrandId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("brandName", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string BrandName { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class SearchProductsRequest : PaginationFilter + { + [Newtonsoft.Json.JsonProperty("brandId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid? BrandId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("minimumRate", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public decimal? MinimumRate { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("maximumRate", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public decimal? MaximumRate { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ProductDetailsDto + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("rate", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public decimal Rate { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("imagePath", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? ImagePath { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("brand", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public BrandDto Brand { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class CreateProductRequest + { + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(75, MinimumLength = 1)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("rate", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + [System.ComponentModel.DataAnnotations.Range(1.0D, double.MaxValue)] + public decimal Rate { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("brandId", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public System.Guid BrandId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("image", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public FileUploadRequest? Image { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UpdateProductRequest + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(75, MinimumLength = 1)] + public string Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("description", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Description { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("rate", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + [System.ComponentModel.DataAnnotations.Range(1.0D, double.MaxValue)] + public decimal Rate { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("brandId", Required = Newtonsoft.Json.Required.Always)] + [System.ComponentModel.DataAnnotations.Required] + public System.Guid BrandId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("deleteCurrentImage", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool DeleteCurrentImage { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("image", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public FileUploadRequest? Image { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ExportProductsRequest : BaseFilter + { + [Newtonsoft.Json.JsonProperty("brandId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid? BrandId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("minimumRate", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public decimal? MinimumRate { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("maximumRate", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public decimal? MaximumRate { get; set; } = default!; + + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class FileResponse : System.IDisposable + { + private System.IDisposable? _client; + private System.IDisposable? _response; + + public int StatusCode { get; private set; } + + public System.Collections.Generic.IReadOnlyDictionary> Headers { get; private set; } + + public System.IO.Stream Stream { get; private set; } + + public bool IsPartial + { + get { return StatusCode == 206; } + } + + public FileResponse(int statusCode, System.Collections.Generic.IReadOnlyDictionary> headers, System.IO.Stream stream, System.IDisposable? client, System.IDisposable? response) + { + StatusCode = statusCode; + Headers = headers; + Stream = stream; + _client = client; + _response = response; + } + + public void Dispose() + { + Stream.Dispose(); + if (_response != null) + _response.Dispose(); + if (_client != null) + _client.Dispose(); + } + } + + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ApiException : System.Exception + { + public int StatusCode { get; private set; } + + public string? Response { get; private set; } + + public System.Collections.Generic.IReadOnlyDictionary> Headers { get; private set; } + + public ApiException(string message, int statusCode, string? response, System.Collections.Generic.IReadOnlyDictionary> headers, System.Exception? innerException) + : base(message + "\n\nStatus: " + statusCode + "\nResponse: \n" + ((response == null) ? "(null)" : response.Substring(0, response.Length >= 512 ? 512 : response.Length)), innerException) + { + StatusCode = statusCode; + Response = response; + Headers = headers; + } + + public override string ToString() + { + return string.Format("HTTP Response: \n\n{0}\n\n{1}", Response, base.ToString()); + } + } + + [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.15.10.0 (NJsonSchema v10.6.10.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ApiException : ApiException + { + public TResult Result { get; private set; } + + public ApiException(string message, int statusCode, string? response, System.Collections.Generic.IReadOnlyDictionary> headers, TResult result, System.Exception? innerException) + : base(message, statusCode, response, headers, innerException) + { + Result = result; + } + } + +} + +#pragma warning restore 1591 +#pragma warning restore 1573 +#pragma warning restore 472 +#pragma warning restore 114 +#pragma warning restore 108 +#pragma warning restore 3016 +#pragma warning restore 8603 \ No newline at end of file diff --git a/src/Client.Infrastructure/ApiClient/IApiService.cs b/src/Client.Infrastructure/ApiClient/IApiService.cs new file mode 100644 index 0000000..4bbe1b4 --- /dev/null +++ b/src/Client.Infrastructure/ApiClient/IApiService.cs @@ -0,0 +1,5 @@ +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; + +public interface IApiService +{ +} \ No newline at end of file diff --git a/src/Client.Infrastructure/ApiClient/nswag.json b/src/Client.Infrastructure/ApiClient/nswag.json new file mode 100644 index 0000000..47351c6 --- /dev/null +++ b/src/Client.Infrastructure/ApiClient/nswag.json @@ -0,0 +1,100 @@ +{ + "runtime": "Net60", + "defaultVariables": null, + "documentGenerator": { + "fromDocument": { + "json": "", + "url": "https://localhost:5001/swagger/v1/swagger.json", + "output": null, + "newLineBehavior": "Auto" + } + }, + "codeGenerators": { + "openApiToCSharpClient": { + "clientBaseClass": null, + "configurationClass": null, + "generateClientClasses": true, + "generateClientInterfaces": true, + "clientBaseInterface": "IApiService", + "injectHttpClient": true, + "disposeHttpClient": false, + "protectedMethods": [], + "generateExceptionClasses": true, + "exceptionClass": "ApiException", + "wrapDtoExceptions": true, + "useHttpClientCreationMethod": false, + "httpClientType": "System.Net.Http.HttpClient", + "useHttpRequestMessageCreationMethod": false, + "useBaseUrl": false, + "generateBaseUrlProperty": true, + "generateSyncMethods": false, + "generatePrepareRequestAndProcessResponseAsAsyncMethods": false, + "exposeJsonSerializerSettings": false, + "clientClassAccessModifier": "public", + "typeAccessModifier": "public", + "generateContractsOutput": false, + "contractsNamespace": null, + "contractsOutputFilePath": null, + "parameterDateTimeFormat": "s", + "parameterDateFormat": "yyyy-MM-dd", + "generateUpdateJsonSerializerSettingsMethod": true, + "useRequestAndResponseSerializationSettings": false, + "serializeTypeInformation": false, + "queryNullValue": "", + "className": "{controller}Client", + "operationGenerationMode": "MultipleClientsFromOperationId", + "additionalNamespaceUsages": [], + "additionalContractNamespaceUsages": [], + "generateOptionalParameters": false, + "generateJsonMethods": false, + "enforceFlagEnums": false, + "parameterArrayType": "System.Collections.Generic.IEnumerable", + "parameterDictionaryType": "System.Collections.Generic.IDictionary", + "responseArrayType": "System.Collections.Generic.ICollection", + "responseDictionaryType": "System.Collections.Generic.IDictionary", + "wrapResponses": false, + "wrapResponseMethods": [], + "generateResponseClasses": true, + "responseClass": "SwaggerResponse", + "namespace": "FSH.BlazorWebAssembly.Client.Infrastructure.ApiClient", + "requiredPropertiesMustBeDefined": true, + "dateType": "System.DateTimeOffset", + "jsonConverters": null, + "anyType": "object", + "dateTimeType": "System.DateTime", + "timeType": "System.TimeSpan", + "timeSpanType": "System.TimeSpan", + "arrayType": "System.Collections.Generic.ICollection", + "arrayInstanceType": "System.Collections.ObjectModel.Collection", + "dictionaryType": "System.Collections.Generic.IDictionary", + "dictionaryInstanceType": "System.Collections.Generic.Dictionary", + "arrayBaseType": "System.Collections.ObjectModel.Collection", + "dictionaryBaseType": "System.Collections.Generic.Dictionary", + "classStyle": "Poco", + "jsonLibrary": "NewtonsoftJson", + "generateDefaultValues": true, + "generateDataAnnotations": true, + "excludedTypeNames": [], + "excludedParameterNames": [], + "handleReferences": false, + "generateImmutableArrayProperties": false, + "generateImmutableDictionaryProperties": false, + "jsonSerializerSettingsTransformationMethod": null, + "inlineNamedArrays": false, + "inlineNamedDictionaries": false, + "inlineNamedTuples": true, + "inlineNamedAny": false, + "generateDtoTypes": true, + "generateOptionalPropertiesAsNullable": false, + "generateNullableReferenceTypes": true, + "templateDirectory": null, + "typeNameGeneratorType": null, + "propertyNameGeneratorType": null, + "enumNameGeneratorType": null, + "serviceHost": null, + "serviceSchemes": null, + "output": "FSHApi.cs", + "newLineBehavior": "Auto" + } + } +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Auth/AuthProvider.cs b/src/Client.Infrastructure/Auth/AuthProvider.cs new file mode 100644 index 0000000..fb956cf --- /dev/null +++ b/src/Client.Infrastructure/Auth/AuthProvider.cs @@ -0,0 +1,7 @@ +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth; + +public enum AuthProvider +{ + Jwt, + AzureAd +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Auth/AuthorizationServiceExtensions.cs b/src/Client.Infrastructure/Auth/AuthorizationServiceExtensions.cs new file mode 100644 index 0000000..8b2e42d --- /dev/null +++ b/src/Client.Infrastructure/Auth/AuthorizationServiceExtensions.cs @@ -0,0 +1,10 @@ +using RewardsPlus.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Authorization; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth; + +public static class AuthorizationServiceExtensions +{ + public static async Task HasPermissionAsync(this IAuthorizationService service, ClaimsPrincipal user, string action, string resource) => + (await service.AuthorizeAsync(user, null, FSHPermission.NameFor(action, resource))).Succeeded; +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Auth/AzureAd/AzureAdAuthenticationService.cs b/src/Client.Infrastructure/Auth/AzureAd/AzureAdAuthenticationService.cs new file mode 100644 index 0000000..821b041 --- /dev/null +++ b/src/Client.Infrastructure/Auth/AzureAd/AzureAdAuthenticationService.cs @@ -0,0 +1,34 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth.AzureAd; + +internal class AzureAdAuthenticationService : IAuthenticationService +{ + private readonly SignOutSessionStateManager _signOut; + private readonly NavigationManager _navigation; + + public AzureAdAuthenticationService(SignOutSessionStateManager signOut, NavigationManager navigation) => + (_signOut, _navigation) = (signOut, navigation); + + public AuthProvider ProviderType => AuthProvider.AzureAd; + + public void NavigateToExternalLogin(string returnUrl) => + _navigation.NavigateTo($"authentication/login?returnUrl={Uri.EscapeDataString(returnUrl)}"); + + public Task LoginAsync(string tenantId, TokenRequest request) => + throw new NotImplementedException(); + + public async Task LogoutAsync() + { + await _signOut.SetSignOutState(); + _navigation.NavigateTo("authentication/logout"); + } + + public Task ReLoginAsync(string returnUrl) + { + NavigateToExternalLogin(returnUrl); + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Auth/AzureAd/AzureAdAuthorizationMessageHandler.cs b/src/Client.Infrastructure/Auth/AzureAd/AzureAdAuthorizationMessageHandler.cs new file mode 100644 index 0000000..53d607e --- /dev/null +++ b/src/Client.Infrastructure/Auth/AzureAd/AzureAdAuthorizationMessageHandler.cs @@ -0,0 +1,12 @@ +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth.AzureAd; + +public class AzureAdAuthorizationMessageHandler : AuthorizationMessageHandler +{ + public AzureAdAuthorizationMessageHandler(IAccessTokenProvider provider, NavigationManager navigation, IConfiguration config) + : base(provider, navigation) => ConfigureHandler( + new[] { config[ConfigNames.ApiBaseUrl] }, + new[] { config[$"{nameof(AuthProvider.AzureAd)}:{ConfigNames.ApiScope}"] }); +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Auth/AzureAd/AzureAdClaimsPrincipalFactory.cs b/src/Client.Infrastructure/Auth/AzureAd/AzureAdClaimsPrincipalFactory.cs new file mode 100644 index 0000000..f678ab3 --- /dev/null +++ b/src/Client.Infrastructure/Auth/AzureAd/AzureAdClaimsPrincipalFactory.cs @@ -0,0 +1,73 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using RewardsPlus.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication.Internal; +using Microsoft.Extensions.DependencyInjection; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth.AzureAd; + +internal class AzureAdClaimsPrincipalFactory : AccountClaimsPrincipalFactory +{ + // Can't work with actual services in the constructor here, have to + // use IServiceProvider, otherwise the app hangs at startup. + // The culprit is probably HttpClient, as this class is instantiated + // at startup while the HttpClient is being (or not even) created. + private readonly IServiceProvider _services; + + public AzureAdClaimsPrincipalFactory(IAccessTokenProviderAccessor accessor, IServiceProvider services) + : base(accessor) => + _services = services; + + public override async ValueTask CreateUserAsync(RemoteUserAccount account, RemoteAuthenticationUserOptions options) + { + var principal = await base.CreateUserAsync(account, options); + + if (principal.Identity?.IsAuthenticated is true) + { + var userDetails = await _services.GetRequiredService().GetProfileAsync(); + + var userIdentity = (ClaimsIdentity)principal.Identity; + + if (!string.IsNullOrWhiteSpace(userDetails.Email) && !userIdentity.HasClaim(c => c.Type == ClaimTypes.Email)) + { + userIdentity.AddClaim(new Claim(ClaimTypes.Email, userDetails.Email)); + } + + if (!string.IsNullOrWhiteSpace(userDetails.PhoneNumber) && !userIdentity.HasClaim(c => c.Type == ClaimTypes.MobilePhone)) + { + userIdentity.AddClaim(new Claim(ClaimTypes.MobilePhone, userDetails.PhoneNumber)); + } + + if (!string.IsNullOrWhiteSpace(userDetails.FirstName) && !userIdentity.HasClaim(c => c.Type == ClaimTypes.Name)) + { + userIdentity.AddClaim(new Claim(ClaimTypes.Name, userDetails.FirstName)); + } + + if (!string.IsNullOrWhiteSpace(userDetails.LastName) && !userIdentity.HasClaim(c => c.Type == ClaimTypes.Surname)) + { + userIdentity.AddClaim(new Claim(ClaimTypes.Surname, userDetails.LastName)); + } + + if (!userIdentity.HasClaim(c => c.Type == FSHClaims.Fullname)) + { + userIdentity.AddClaim(new Claim(FSHClaims.Fullname, $"{userDetails.FirstName} {userDetails.LastName}")); + } + + if (!userIdentity.HasClaim(c => c.Type == ClaimTypes.NameIdentifier)) + { + userIdentity.AddClaim(new Claim(ClaimTypes.NameIdentifier, userDetails.Id.ToString())); + } + + if (!string.IsNullOrWhiteSpace(userDetails.ImageUrl) && !userIdentity.HasClaim(c => c.Type == FSHClaims.ImageUrl) && userDetails.ImageUrl is not null) + { + userIdentity.AddClaim(new Claim(FSHClaims.ImageUrl, userDetails.ImageUrl)); + } + + var permissions = await _services.GetRequiredService().GetPermissionsAsync(); + + userIdentity.AddClaims(permissions.Select(permission => new Claim(FSHClaims.Permission, permission))); + } + + return principal; + } +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Auth/IAuthenticationService.cs b/src/Client.Infrastructure/Auth/IAuthenticationService.cs new file mode 100644 index 0000000..685d53a --- /dev/null +++ b/src/Client.Infrastructure/Auth/IAuthenticationService.cs @@ -0,0 +1,16 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth; + +public interface IAuthenticationService +{ + AuthProvider ProviderType { get; } + + void NavigateToExternalLogin(string returnUrl); + + Task LoginAsync(string tenantId, TokenRequest request); + + Task LogoutAsync(); + + Task ReLoginAsync(string returnUrl); +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Auth/Jwt/AccessTokenProviderAccessor.cs b/src/Client.Infrastructure/Auth/Jwt/AccessTokenProviderAccessor.cs new file mode 100644 index 0000000..a9b1ecd --- /dev/null +++ b/src/Client.Infrastructure/Auth/Jwt/AccessTokenProviderAccessor.cs @@ -0,0 +1,17 @@ +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication.Internal; +using Microsoft.Extensions.DependencyInjection; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth.Jwt; + +internal class AccessTokenProviderAccessor : IAccessTokenProviderAccessor +{ + private readonly IServiceProvider _provider; + private IAccessTokenProvider? _tokenProvider; + + public AccessTokenProviderAccessor(IServiceProvider provider) => + _provider = provider; + + public IAccessTokenProvider TokenProvider => + _tokenProvider ??= _provider.GetRequiredService(); +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Auth/Jwt/JwtAuthenticationHeaderHandler.cs b/src/Client.Infrastructure/Auth/Jwt/JwtAuthenticationHeaderHandler.cs new file mode 100644 index 0000000..59b6ff3 --- /dev/null +++ b/src/Client.Infrastructure/Auth/Jwt/JwtAuthenticationHeaderHandler.cs @@ -0,0 +1,34 @@ +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication.Internal; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth.Jwt; + +public class JwtAuthenticationHeaderHandler : DelegatingHandler +{ + private readonly IAccessTokenProviderAccessor _tokenProviderAccessor; + private readonly NavigationManager _navigation; + + public JwtAuthenticationHeaderHandler(IAccessTokenProviderAccessor tokenProviderAccessor, NavigationManager navigation) + { + _tokenProviderAccessor = tokenProviderAccessor; + _navigation = navigation; + } + + protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + { + // skip token endpoints + if (request.RequestUri?.AbsolutePath.Contains("/tokens") is not true) + { + if (await _tokenProviderAccessor.TokenProvider.GetAccessTokenAsync() is string token) + { + request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token); + } + else + { + _navigation.NavigateTo("/login"); + } + } + + return await base.SendAsync(request, cancellationToken); + } +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Auth/Jwt/JwtAuthenticationService.cs b/src/Client.Infrastructure/Auth/Jwt/JwtAuthenticationService.cs new file mode 100644 index 0000000..061019d --- /dev/null +++ b/src/Client.Infrastructure/Auth/Jwt/JwtAuthenticationService.cs @@ -0,0 +1,222 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using RewardsPlus.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth.Jwt; + +public class JwtAuthenticationService : AuthenticationStateProvider, IAuthenticationService, IAccessTokenProvider +{ + private readonly SemaphoreSlim _semaphore = new(1, 1); + + private readonly ILocalStorageService _localStorage; + private readonly ITokensClient _tokensClient; + private readonly IPersonalClient _personalClient; + private readonly NavigationManager _navigation; + + public AuthProvider ProviderType => AuthProvider.Jwt; + + public JwtAuthenticationService(ILocalStorageService localStorage, IPersonalClient personalClient, ITokensClient tokensClient, NavigationManager navigation) + { + _localStorage = localStorage; + _personalClient = personalClient; + _tokensClient = tokensClient; + _navigation = navigation; + } + + public override async Task GetAuthenticationStateAsync() + { + string cachedToken = await GetCachedAuthTokenAsync(); + if (string.IsNullOrWhiteSpace(cachedToken)) + { + return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity())); + } + + // Generate claimsIdentity from cached token + var claimsIdentity = new ClaimsIdentity(GetClaimsFromJwt(cachedToken), "jwt"); + + // Add cached permissions as claims + if (await GetCachedPermissionsAsync() is List cachedPermissions) + { + claimsIdentity.AddClaims(cachedPermissions.Select(p => new Claim(FSHClaims.Permission, p))); + } + + return new AuthenticationState(new ClaimsPrincipal(claimsIdentity)); + } + + public void NavigateToExternalLogin(string returnUrl) => + throw new NotImplementedException(); + + public async Task LoginAsync(string tenantId, TokenRequest request) + { + var tokenResponse = await _tokensClient.GetTokenAsync(tenantId, request); + + string? token = tokenResponse.Token; + string? refreshToken = tokenResponse.RefreshToken; + + if (string.IsNullOrWhiteSpace(token) || string.IsNullOrWhiteSpace(refreshToken)) + { + return false; + } + + await CacheAuthTokens(token, refreshToken); + + // Get permissions for the current user and add them to the cache + var permissions = await _personalClient.GetPermissionsAsync(); + await CachePermissions(permissions); + + NotifyAuthenticationStateChanged(GetAuthenticationStateAsync()); + + return true; + } + + public async Task LogoutAsync() + { + await ClearCacheAsync(); + + NotifyAuthenticationStateChanged(GetAuthenticationStateAsync()); + + _navigation.NavigateTo("/login"); + } + + public async Task ReLoginAsync(string returnUrl) + { + await LogoutAsync(); + _navigation.NavigateTo(returnUrl); + } + + public async ValueTask RequestAccessToken() + { + var authState = await GetAuthenticationStateAsync(); + if (authState.User.Identity?.IsAuthenticated is not true) + { + return new AccessTokenResult(AccessTokenResultStatus.RequiresRedirect, null, "/login"); + } + + // We make sure the access token is only refreshed by one thread at a time. The other ones have to wait. + await _semaphore.WaitAsync(); + try + { + string? token = await GetCachedAuthTokenAsync(); + + // Check if token needs to be refreshed (when its expiration time is less than 1 minute away) + var expTime = authState.User.GetExpiration(); + var diff = expTime - DateTime.UtcNow; + if (diff.TotalMinutes <= 1) + { + string? refreshToken = await GetCachedRefreshTokenAsync(); + (bool succeeded, var response) = await TryRefreshTokenAsync(new RefreshTokenRequest { Token = token, RefreshToken = refreshToken }); + if (!succeeded) + { + return new AccessTokenResult(AccessTokenResultStatus.RequiresRedirect, null, "/login"); + } + + token = response?.Token; + } + + return new AccessTokenResult(AccessTokenResultStatus.Success, new AccessToken() { Value = token }, string.Empty); + } + finally + { + _semaphore.Release(); + } + } + + public ValueTask RequestAccessToken(AccessTokenRequestOptions options) => + RequestAccessToken(); + + private async Task<(bool Succeeded, TokenResponse? Token)> TryRefreshTokenAsync(RefreshTokenRequest request) + { + var authState = await GetAuthenticationStateAsync(); + string? tenantKey = authState.User.GetTenant(); + if (string.IsNullOrWhiteSpace(tenantKey)) + { + throw new InvalidOperationException("Can't refresh token when user is not logged in!"); + } + + try + { + var tokenResponse = await _tokensClient.RefreshAsync(tenantKey, request); + + await CacheAuthTokens(tokenResponse.Token, tokenResponse.RefreshToken); + + return (true, tokenResponse); + } + catch (ApiException) + { + return (false, null); + } + } + + private async ValueTask CacheAuthTokens(string? token, string? refreshToken) + { + await _localStorage.SetItemAsync(StorageConstants.Local.AuthToken, token); + await _localStorage.SetItemAsync(StorageConstants.Local.RefreshToken, refreshToken); + } + + private ValueTask CachePermissions(ICollection permissions) => + _localStorage.SetItemAsync(StorageConstants.Local.Permissions, permissions); + + private async Task ClearCacheAsync() + { + await _localStorage.RemoveItemAsync(StorageConstants.Local.AuthToken); + await _localStorage.RemoveItemAsync(StorageConstants.Local.RefreshToken); + await _localStorage.RemoveItemAsync(StorageConstants.Local.Permissions); + } + + private ValueTask GetCachedAuthTokenAsync() => + _localStorage.GetItemAsync(StorageConstants.Local.AuthToken); + + private ValueTask GetCachedRefreshTokenAsync() => + _localStorage.GetItemAsync(StorageConstants.Local.RefreshToken); + + private ValueTask> GetCachedPermissionsAsync() => + _localStorage.GetItemAsync>(StorageConstants.Local.Permissions); + + private IEnumerable GetClaimsFromJwt(string jwt) + { + var claims = new List(); + string payload = jwt.Split('.')[1]; + byte[] jsonBytes = ParseBase64WithoutPadding(payload); + var keyValuePairs = JsonSerializer.Deserialize>(jsonBytes); + + if (keyValuePairs is not null) + { + keyValuePairs.TryGetValue(ClaimTypes.Role, out object? roles); + + if (roles is not null) + { + string? rolesString = roles.ToString(); + if (!string.IsNullOrEmpty(rolesString)) + { + if (rolesString.Trim().StartsWith("[")) + { + string[]? parsedRoles = JsonSerializer.Deserialize(rolesString); + + if (parsedRoles is not null) + { + claims.AddRange(parsedRoles.Select(role => new Claim(ClaimTypes.Role, role))); + } + } + else + { + claims.Add(new Claim(ClaimTypes.Role, rolesString)); + } + } + + keyValuePairs.Remove(ClaimTypes.Role); + } + + claims.AddRange(keyValuePairs.Select(kvp => new Claim(kvp.Key, kvp.Value.ToString() ?? string.Empty))); + } + + return claims; + } + + private byte[] ParseBase64WithoutPadding(string payload) + { + payload = payload.Trim().Replace('-', '+').Replace('_', '/'); + string base64 = payload.PadRight(payload.Length + ((4 - (payload.Length % 4)) % 4), '='); + return Convert.FromBase64String(base64); + } +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Auth/MustHavePermissionAttribute.cs b/src/Client.Infrastructure/Auth/MustHavePermissionAttribute.cs new file mode 100644 index 0000000..3618e7e --- /dev/null +++ b/src/Client.Infrastructure/Auth/MustHavePermissionAttribute.cs @@ -0,0 +1,10 @@ +using RewardsPlus.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Authorization; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth; + +public class MustHavePermissionAttribute : AuthorizeAttribute +{ + public MustHavePermissionAttribute(string action, string resource) => + Policy = FSHPermission.NameFor(action, resource); +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Auth/Startup.cs b/src/Client.Infrastructure/Auth/Startup.cs new file mode 100644 index 0000000..f692474 --- /dev/null +++ b/src/Client.Infrastructure/Auth/Startup.cs @@ -0,0 +1,47 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth.AzureAd; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth.Jwt; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication.Internal; +using Microsoft.Extensions.DependencyInjection; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth; + +internal static class Startup +{ + public static IServiceCollection AddAuthentication(this IServiceCollection services, IConfiguration config) => + config[nameof(AuthProvider)] switch + { + // AzureAd + nameof(AuthProvider.AzureAd) => services + .AddScoped() + .AddScoped() + .AddMsalAuthentication(options => + { + config.Bind(nameof(AuthProvider.AzureAd), options.ProviderOptions.Authentication); + options.ProviderOptions.DefaultAccessTokenScopes.Add( + config[$"{nameof(AuthProvider.AzureAd)}:{ConfigNames.ApiScope}"]); + options.ProviderOptions.LoginMode = "redirect"; + }) + .AddAccountClaimsPrincipalFactory() + .Services, + + // Jwt + _ => services + .AddScoped() + .AddScoped(sp => (IAuthenticationService)sp.GetRequiredService()) + .AddScoped(sp => (IAccessTokenProvider)sp.GetRequiredService()) + .AddScoped() + .AddScoped() + }; + + public static IHttpClientBuilder AddAuthenticationHandler(this IHttpClientBuilder builder, IConfiguration config) => + config[nameof(AuthProvider)] switch + { + // AzureAd + nameof(AuthProvider.AzureAd) => + builder.AddHttpMessageHandler(), + + // Jwt + _ => builder.AddHttpMessageHandler() + }; +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Client.Infrastructure.csproj b/src/Client.Infrastructure/Client.Infrastructure.csproj new file mode 100644 index 0000000..e1301f9 --- /dev/null +++ b/src/Client.Infrastructure/Client.Infrastructure.csproj @@ -0,0 +1,39 @@ + + + + net6.0 + FSH.BlazorWebAssembly.Client.Infrastructure + FSH.BlazorWebAssembly.Client.Infrastructure + + + + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Client.Infrastructure/Common/AccessTokenProviderExtensions.cs b/src/Client.Infrastructure/Common/AccessTokenProviderExtensions.cs new file mode 100644 index 0000000..3b12abc --- /dev/null +++ b/src/Client.Infrastructure/Common/AccessTokenProviderExtensions.cs @@ -0,0 +1,12 @@ +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Common; + +public static class AccessTokenProviderExtensions +{ + public static async Task GetAccessTokenAsync(this IAccessTokenProvider tokenProvider) => + (await tokenProvider.RequestAccessToken()) + .TryGetToken(out var token) + ? token.Value + : null; +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Common/ApplicationConstants.cs b/src/Client.Infrastructure/Common/ApplicationConstants.cs new file mode 100644 index 0000000..02c94e9 --- /dev/null +++ b/src/Client.Infrastructure/Common/ApplicationConstants.cs @@ -0,0 +1,15 @@ +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Common; + +public static class ApplicationConstants +{ + public static readonly List SupportedImageFormats = new() + { + ".jpeg", + ".jpg", + ".png" + }; + public static readonly string StandardImageFormat = "image/jpeg"; + public static readonly int MaxImageWidth = 1500; + public static readonly int MaxImageHeight = 1500; + public static readonly long MaxAllowedSize = 1000000; // Allows Max File Size of 1 Mb. +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Common/ConfigNames.cs b/src/Client.Infrastructure/Common/ConfigNames.cs new file mode 100644 index 0000000..b2a0133 --- /dev/null +++ b/src/Client.Infrastructure/Common/ConfigNames.cs @@ -0,0 +1,7 @@ +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Common; + +public static class ConfigNames +{ + public const string ApiBaseUrl = "ApiBaseUrl"; + public const string ApiScope = "ApiScope"; +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Common/IAppService.cs b/src/Client.Infrastructure/Common/IAppService.cs new file mode 100644 index 0000000..c23b0b1 --- /dev/null +++ b/src/Client.Infrastructure/Common/IAppService.cs @@ -0,0 +1,5 @@ +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Common; + +public interface IAppService +{ +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Common/LocalizationConstants.cs b/src/Client.Infrastructure/Common/LocalizationConstants.cs new file mode 100644 index 0000000..4d7e7cf --- /dev/null +++ b/src/Client.Infrastructure/Common/LocalizationConstants.cs @@ -0,0 +1,21 @@ +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Common; + +public record LanguageCode(string Code, string DisplayName, bool IsRTL = false); + +public static class LocalizationConstants +{ + public static readonly LanguageCode[] SupportedLanguages = + { + new("en-US", "English"), + new("fr-FR", "French"), + new("km_KH", "Khmer"), + new("de-DE", "German"), + new("nl-NL", "Dutch - Netherlands"), + new("es-ES", "Spanish"), + new("ru-RU", "Russian"), + new("sv-SE", "Swedish"), + new("id-ID", "Indonesia"), + new("it-IT", "Italian"), + new("ar", "عربي", true) + }; +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Common/StorageConstants.cs b/src/Client.Infrastructure/Common/StorageConstants.cs new file mode 100644 index 0000000..f044cac --- /dev/null +++ b/src/Client.Infrastructure/Common/StorageConstants.cs @@ -0,0 +1,14 @@ +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Common; + +public static class StorageConstants +{ + public static class Local + { + public static string Preference = "clientPreference"; + + public static string AuthToken = "authToken"; + public static string RefreshToken = "refreshToken"; + public static string ImageUri = "userImageURL"; + public static string Permissions = "permissions"; + } +} \ No newline at end of file diff --git a/src/Client.Infrastructure/GlobalUsings.cs b/src/Client.Infrastructure/GlobalUsings.cs new file mode 100644 index 0000000..563b3e0 --- /dev/null +++ b/src/Client.Infrastructure/GlobalUsings.cs @@ -0,0 +1,7 @@ +global using System.Net.Http.Headers; +global using System.Security.Claims; +global using System.Text.Json; +global using Blazored.LocalStorage; +global using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Common; +global using Microsoft.AspNetCore.Components.Authorization; +global using Microsoft.Extensions.Configuration; diff --git a/src/Client.Infrastructure/Notifications/ConnectionState.cs b/src/Client.Infrastructure/Notifications/ConnectionState.cs new file mode 100644 index 0000000..6dbfc01 --- /dev/null +++ b/src/Client.Infrastructure/Notifications/ConnectionState.cs @@ -0,0 +1,8 @@ +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Notifications; + +public enum ConnectionState +{ + Connected, + Connecting, + Disconnected +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Notifications/ConnectionStateChanged.cs b/src/Client.Infrastructure/Notifications/ConnectionStateChanged.cs new file mode 100644 index 0000000..2987586 --- /dev/null +++ b/src/Client.Infrastructure/Notifications/ConnectionStateChanged.cs @@ -0,0 +1,5 @@ +using RewardsPlus.WebApi.Shared.Notifications; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Notifications; + +public record ConnectionStateChanged(ConnectionState State, string? Message) : INotificationMessage; \ No newline at end of file diff --git a/src/Client.Infrastructure/Notifications/INotificationPublisher.cs b/src/Client.Infrastructure/Notifications/INotificationPublisher.cs new file mode 100644 index 0000000..1a7b0df --- /dev/null +++ b/src/Client.Infrastructure/Notifications/INotificationPublisher.cs @@ -0,0 +1,8 @@ +using RewardsPlus.WebApi.Shared.Notifications; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Notifications; + +public interface INotificationPublisher +{ + Task PublishAsync(INotificationMessage notification); +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Notifications/NotificationPublisher.cs b/src/Client.Infrastructure/Notifications/NotificationPublisher.cs new file mode 100644 index 0000000..0ae62d2 --- /dev/null +++ b/src/Client.Infrastructure/Notifications/NotificationPublisher.cs @@ -0,0 +1,24 @@ +using RewardsPlus.WebApi.Shared.Notifications; +using MediatR; +using Microsoft.Extensions.Logging; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Notifications; + +public class NotificationPublisher : INotificationPublisher +{ + private readonly ILogger _logger; + private readonly IPublisher _mediator; + + public NotificationPublisher(ILogger logger, IPublisher mediator) => + (_logger, _mediator) = (logger, mediator); + + public Task PublishAsync(INotificationMessage notification) + { + _logger.LogInformation("Publishing Notification : {notification}", notification.GetType().Name); + return _mediator.Publish(CreateNotificationWrapper(notification)); + } + + private INotification CreateNotificationWrapper(INotificationMessage notification) => + (INotification)Activator.CreateInstance( + typeof(NotificationWrapper<>).MakeGenericType(notification.GetType()), notification)!; +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Notifications/NotificationWrapper.cs b/src/Client.Infrastructure/Notifications/NotificationWrapper.cs new file mode 100644 index 0000000..40c0f11 --- /dev/null +++ b/src/Client.Infrastructure/Notifications/NotificationWrapper.cs @@ -0,0 +1,12 @@ +using RewardsPlus.WebApi.Shared.Notifications; +using MediatR; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Notifications; + +public class NotificationWrapper : INotification + where TNotificationMessage : INotificationMessage +{ + public NotificationWrapper(TNotificationMessage notification) => Notification = notification; + + public TNotificationMessage Notification { get; } +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Notifications/Startup.cs b/src/Client.Infrastructure/Notifications/Startup.cs new file mode 100644 index 0000000..df712d2 --- /dev/null +++ b/src/Client.Infrastructure/Notifications/Startup.cs @@ -0,0 +1,34 @@ +using RewardsPlus.WebApi.Shared.Notifications; +using MediatR; +using MediatR.Courier; +using MediatR.Courier.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Notifications; + +internal static class Startup +{ + public static IServiceCollection AddNotifications(this IServiceCollection services) + { + // Add mediator processing of notifications + var assemblies = AppDomain.CurrentDomain.GetAssemblies(); + + services + .AddMediatR(assemblies) + .AddCourier(assemblies) + .AddTransient(); + + // Register handlers for all INotificationMessages + foreach (var eventType in assemblies + .SelectMany(a => a.GetTypes()) + .Where(t => t.GetInterfaces().Any(i => i == typeof(INotificationMessage)))) + { + services.AddSingleton( + typeof(INotificationHandler<>).MakeGenericType( + typeof(NotificationWrapper<>).MakeGenericType(eventType)), + serviceProvider => serviceProvider.GetRequiredService(typeof(MediatRCourier))); + } + + return services; + } +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Preferences/ClientPreference.cs b/src/Client.Infrastructure/Preferences/ClientPreference.cs new file mode 100644 index 0000000..f5df767 --- /dev/null +++ b/src/Client.Infrastructure/Preferences/ClientPreference.cs @@ -0,0 +1,15 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Theme; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Preferences; + +public class ClientPreference : IPreference +{ + public bool IsDarkMode { get; set; } + public bool IsRTL { get; set; } + public bool IsDrawerOpen { get; set; } + public string PrimaryColor { get; set; } = CustomColors.Light.Primary; + public string SecondaryColor { get; set; } = CustomColors.Light.Secondary; + public double BorderRadius { get; set; } = 5; + public string LanguageCode { get; set; } = LocalizationConstants.SupportedLanguages.FirstOrDefault()?.Code ?? "en-US"; + public FshTablePreference TablePreference { get; set; } = new FshTablePreference(); +} diff --git a/src/Client.Infrastructure/Preferences/ClientPreferenceManager.cs b/src/Client.Infrastructure/Preferences/ClientPreferenceManager.cs new file mode 100644 index 0000000..d1842b4 --- /dev/null +++ b/src/Client.Infrastructure/Preferences/ClientPreferenceManager.cs @@ -0,0 +1,137 @@ +using System.Text.RegularExpressions; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Theme; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Preferences; + +public class ClientPreferenceManager : IClientPreferenceManager +{ + private readonly ILocalStorageService _localStorageService; + + public ClientPreferenceManager( + ILocalStorageService localStorageService) + { + _localStorageService = localStorageService; + } + + public async Task ToggleDarkModeAsync() + { + if (await GetPreference() is ClientPreference preference) + { + preference.IsDarkMode = !preference.IsDarkMode; + await SetPreference(preference); + return !preference.IsDarkMode; + } + + return false; + } + + public async Task ToggleDrawerAsync() + { + if (await GetPreference() is ClientPreference preference) + { + preference.IsDrawerOpen = !preference.IsDrawerOpen; + await SetPreference(preference); + return preference.IsDrawerOpen; + } + + return false; + } + + public async Task ToggleLayoutDirectionAsync() + { + if (await GetPreference() is ClientPreference preference) + { + preference.IsRTL = !preference.IsRTL; + await SetPreference(preference); + return preference.IsRTL; + } + + return false; + } + + public async Task ChangeLanguageAsync(string languageCode) + { + if (await GetPreference() is ClientPreference preference) + { + var language = Array.Find(LocalizationConstants.SupportedLanguages, a => a.Code == languageCode); + if (language?.Code is not null) + { + preference.LanguageCode = language.Code; + preference.IsRTL = language.IsRTL; + } + else + { + preference.LanguageCode = "en-EN"; + preference.IsRTL = false; + } + + await SetPreference(preference); + return true; + } + + return false; + } + + public async Task GetCurrentThemeAsync() + { + if (await GetPreference() is ClientPreference preference) + { + if (preference.IsDarkMode) return new DarkTheme(); + } + + return new LightTheme(); + } + + public async Task GetPrimaryColorAsync() + { + if (await GetPreference() is ClientPreference preference) + { + string colorCode = preference.PrimaryColor; + if (Regex.Match(colorCode, "^#(?:[0-9a-fA-F]{3,4}){1,2}$").Success) + { + return colorCode; + } + else + { + preference.PrimaryColor = CustomColors.Light.Primary; + await SetPreference(preference); + return preference.PrimaryColor; + } + } + + return CustomColors.Light.Primary; + } + + public async Task IsRTL() + { + if (await GetPreference() is ClientPreference preference) + { + return preference.IsRTL; + } + + return false; + } + + public async Task IsDrawerOpen() + { + if (await GetPreference() is ClientPreference preference) + { + return preference.IsDrawerOpen; + } + + return false; + } + + public static string Preference = "clientPreference"; + + public async Task GetPreference() + { + return await _localStorageService.GetItemAsync(Preference) ?? new ClientPreference(); + } + + public async Task SetPreference(IPreference preference) + { + await _localStorageService.SetItemAsync(Preference, preference as ClientPreference); + } +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Preferences/FshTablePreference.cs b/src/Client.Infrastructure/Preferences/FshTablePreference.cs new file mode 100644 index 0000000..33e5a49 --- /dev/null +++ b/src/Client.Infrastructure/Preferences/FshTablePreference.cs @@ -0,0 +1,11 @@ +using RewardsPlus.WebApi.Shared.Notifications; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Preferences; + +public class FshTablePreference : INotificationMessage +{ + public bool IsDense { get; set; } + public bool IsStriped { get; set; } + public bool HasBorder { get; set; } + public bool IsHoverable { get; set; } +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Preferences/IClientPreferenceManager.cs b/src/Client.Infrastructure/Preferences/IClientPreferenceManager.cs new file mode 100644 index 0000000..cbaf767 --- /dev/null +++ b/src/Client.Infrastructure/Preferences/IClientPreferenceManager.cs @@ -0,0 +1,14 @@ +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Preferences; + +public interface IClientPreferenceManager : IPreferenceManager +{ + Task GetCurrentThemeAsync(); + + Task ToggleDarkModeAsync(); + + Task ToggleDrawerAsync(); + + Task ToggleLayoutDirectionAsync(); +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Preferences/IPreference.cs b/src/Client.Infrastructure/Preferences/IPreference.cs new file mode 100644 index 0000000..3092e42 --- /dev/null +++ b/src/Client.Infrastructure/Preferences/IPreference.cs @@ -0,0 +1,6 @@ +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Preferences; + +public interface IPreference +{ + // public string LanguageCode { get; set; } +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Preferences/IPreferenceManager.cs b/src/Client.Infrastructure/Preferences/IPreferenceManager.cs new file mode 100644 index 0000000..c0644b4 --- /dev/null +++ b/src/Client.Infrastructure/Preferences/IPreferenceManager.cs @@ -0,0 +1,10 @@ +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Preferences; + +public interface IPreferenceManager : IAppService +{ + Task SetPreference(IPreference preference); + + Task GetPreference(); + + Task ChangeLanguageAsync(string languageCode); +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Startup.cs b/src/Client.Infrastructure/Startup.cs new file mode 100644 index 0000000..298139a --- /dev/null +++ b/src/Client.Infrastructure/Startup.cs @@ -0,0 +1,81 @@ +using System.Globalization; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Notifications; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Preferences; +using RewardsPlus.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.DependencyInjection; +using MudBlazor; +using MudBlazor.Services; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure; + +public static class Startup +{ + private const string ClientName = "FullStackHero.API"; + + public static IServiceCollection AddClientServices(this IServiceCollection services, IConfiguration config) => + services + .AddLocalization(options => options.ResourcesPath = "Resources") + .AddBlazoredLocalStorage() + .AddMudServices(configuration => + { + configuration.SnackbarConfiguration.PositionClass = Defaults.Classes.Position.BottomRight; + configuration.SnackbarConfiguration.HideTransitionDuration = 100; + configuration.SnackbarConfiguration.ShowTransitionDuration = 100; + configuration.SnackbarConfiguration.VisibleStateDuration = 3000; + configuration.SnackbarConfiguration.ShowCloseIcon = false; + }) + .AddScoped() + .AutoRegisterInterfaces() + .AutoRegisterInterfaces() + .AddNotifications() + .AddAuthentication(config) + .AddAuthorizationCore(RegisterPermissionClaims) + + // Add Api Http Client. + .AddHttpClient(ClientName, client => + { + client.DefaultRequestHeaders.AcceptLanguage.Clear(); + client.DefaultRequestHeaders.AcceptLanguage.ParseAdd(CultureInfo.DefaultThreadCurrentCulture?.TwoLetterISOLanguageName); + client.BaseAddress = new Uri(config[ConfigNames.ApiBaseUrl]); + }) + .AddAuthenticationHandler(config) + .Services + .AddScoped(sp => sp.GetRequiredService().CreateClient(ClientName)); + + private static void RegisterPermissionClaims(AuthorizationOptions options) + { + foreach (var permission in FSHPermissions.All) + { + options.AddPolicy(permission.Name, policy => policy.RequireClaim(FSHClaims.Permission, permission.Name)); + } + } + + public static IServiceCollection AutoRegisterInterfaces(this IServiceCollection services) + { + var @interface = typeof(T); + + var types = @interface + .Assembly + .GetExportedTypes() + .Where(t => t.IsClass && !t.IsAbstract) + .Select(t => new + { + Service = t.GetInterface($"I{t.Name}"), + Implementation = t + }) + .Where(t => t.Service != null); + + foreach (var type in types) + { + if (@interface.IsAssignableFrom(type.Service)) + { + services.AddTransient(type.Service, type.Implementation); + } + } + + return services; + } +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Theme/CustomColors.cs b/src/Client.Infrastructure/Theme/CustomColors.cs new file mode 100644 index 0000000..847b602 --- /dev/null +++ b/src/Client.Infrastructure/Theme/CustomColors.cs @@ -0,0 +1,42 @@ +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Theme; + +public static class CustomColors +{ + public static readonly List ThemeColors = new() + { + Light.Primary, + Colors.Blue.Default, + Colors.BlueGrey.Default, + Colors.Purple.Default, + Colors.Orange.Default, + Colors.Red.Default, + Colors.Amber.Default, + Colors.DeepPurple.Default, + Colors.Pink.Default, + Colors.Indigo.Default, + Colors.LightBlue.Default, + Colors.Cyan.Default, + }; + + public static class Light + { + public const string Primary = "#3eaf7c"; + public const string Secondary = "#2196f3"; + public const string Background = "#FFF"; + public const string AppbarBackground = "#FFF"; + public const string AppbarText = "#6e6e6e"; + } + + public static class Dark + { + public const string Primary = "#3eaf7c"; + public const string Secondary = "#2196f3"; + public const string Background = "#1b1f22"; + public const string AppbarBackground = "#1b1f22"; + public const string DrawerBackground = "#121212"; + public const string Surface = "#202528"; + public const string Disabled = "#545454"; + } +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Theme/CustomTypography.cs b/src/Client.Infrastructure/Theme/CustomTypography.cs new file mode 100644 index 0000000..9f8e6af --- /dev/null +++ b/src/Client.Infrastructure/Theme/CustomTypography.cs @@ -0,0 +1,114 @@ +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Theme; + +public static class CustomTypography +{ + public static Typography FSHTypography => new Typography() + { + Default = new Default() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = ".875rem", + FontWeight = 200, + LineHeight = 1.43, + LetterSpacing = ".01071em" + }, + H1 = new H1() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = "6rem", + FontWeight = 300, + LineHeight = 1.167, + LetterSpacing = "-.01562em" + }, + H2 = new H2() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = "3.75rem", + FontWeight = 300, + LineHeight = 1.2, + LetterSpacing = "-.00833em" + }, + H3 = new H3() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = "3rem", + FontWeight = 400, + LineHeight = 1.167, + LetterSpacing = "0" + }, + H4 = new H4() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = "2.125rem", + FontWeight = 400, + LineHeight = 1.235, + LetterSpacing = ".00735em" + }, + H5 = new H5() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = "1.5rem", + FontWeight = 400, + LineHeight = 1.334, + LetterSpacing = "0" + }, + H6 = new H6() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = "1.25rem", + FontWeight = 400, + LineHeight = 1.6, + LetterSpacing = ".0075em" + }, + Button = new Button() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = ".875rem", + FontWeight = 400, + LineHeight = 1.75, + LetterSpacing = ".02857em" + }, + Body1 = new Body1() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = "1rem", + FontWeight = 400, + LineHeight = 1.5, + LetterSpacing = ".00938em" + }, + Body2 = new Body2() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = ".875rem", + FontWeight = 400, + LineHeight = 1.43, + LetterSpacing = ".01071em" + }, + Caption = new Caption() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = ".75rem", + FontWeight = 200, + LineHeight = 1.66, + LetterSpacing = ".03333em" + }, + Subtitle1 = new Subtitle1() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = "1rem", + FontWeight = 400, + LineHeight = 1.57, + LetterSpacing = ".00714em" + }, + Subtitle2 = new Subtitle2() + { + FontFamily = new[] { "Montserrat", "Helvetica", "Arial", "sans-serif" }, + FontSize = ".875rem", + FontWeight = 400, + LineHeight = 1.57, + LetterSpacing = ".00714em" + } + }; +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Theme/DarkTheme.cs b/src/Client.Infrastructure/Theme/DarkTheme.cs new file mode 100644 index 0000000..3d36aec --- /dev/null +++ b/src/Client.Infrastructure/Theme/DarkTheme.cs @@ -0,0 +1,44 @@ +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Theme; + +public class DarkTheme : MudTheme +{ + public DarkTheme() + { + Palette = new Palette() + { + Primary = CustomColors.Dark.Primary, + Secondary = CustomColors.Dark.Secondary, + Success = CustomColors.Dark.Primary, + Black = "#27272f", + Background = CustomColors.Dark.Background, + BackgroundGrey = "#27272f", + Surface = CustomColors.Dark.Surface, + DrawerBackground = CustomColors.Dark.DrawerBackground, + DrawerText = "rgba(255,255,255, 0.50)", + AppbarBackground = CustomColors.Dark.AppbarBackground, + AppbarText = "rgba(255,255,255, 0.70)", + TextPrimary = "rgba(255,255,255, 0.70)", + TextSecondary = "rgba(255,255,255, 0.50)", + ActionDefault = "#adadb1", + ActionDisabled = "rgba(255,255,255, 0.26)", + ActionDisabledBackground = "rgba(255,255,255, 0.12)", + DrawerIcon = "rgba(255,255,255, 0.50)", + TableLines = "#e0e0e036", + Dark = CustomColors.Dark.DrawerBackground, + Divider = "#e0e0e036", + OverlayDark = "hsl(0deg 0% 0% / 75%)", + TextDisabled = CustomColors.Dark.Disabled + }; + + LayoutProperties = new LayoutProperties() + { + DefaultBorderRadius = "5px", + }; + + Typography = CustomTypography.FSHTypography; + Shadows = new Shadow(); + ZIndex = new ZIndex() { Drawer = 1300 }; + } +} \ No newline at end of file diff --git a/src/Client.Infrastructure/Theme/LightTheme.cs b/src/Client.Infrastructure/Theme/LightTheme.cs new file mode 100644 index 0000000..1771083 --- /dev/null +++ b/src/Client.Infrastructure/Theme/LightTheme.cs @@ -0,0 +1,31 @@ +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Theme; + +public class LightTheme : MudTheme +{ + public LightTheme() + { + Palette = new Palette() + { + Primary = CustomColors.Light.Primary, + Secondary = CustomColors.Light.Secondary, + Background = CustomColors.Light.Background, + AppbarBackground = CustomColors.Light.AppbarBackground, + AppbarText = CustomColors.Light.AppbarText, + DrawerBackground = CustomColors.Light.Background, + DrawerText = "rgba(0,0,0, 0.7)", + Success = CustomColors.Light.Primary, + TableLines = "#e0e0e029", + OverlayDark = "hsl(0deg 0% 0% / 75%)" + }; + LayoutProperties = new LayoutProperties() + { + DefaultBorderRadius = "5px" + }; + + Typography = CustomTypography.FSHTypography; + Shadows = new Shadow(); + ZIndex = new ZIndex() { Drawer = 1300 }; + } +} \ No newline at end of file diff --git a/src/Client/App.razor b/src/Client/App.razor new file mode 100644 index 0000000..8fd8903 --- /dev/null +++ b/src/Client/App.razor @@ -0,0 +1,23 @@ + + + + + + @if (@context.User.Identity?.IsAuthenticated is true) + { +

You are not authorized to be here.

+ } + else + { + + } +
+
+
+ + +

Sorry, there's nothing at this address.

+
+
+
+
\ No newline at end of file diff --git a/src/Client/Client.csproj b/src/Client/Client.csproj new file mode 100644 index 0000000..08fec69 --- /dev/null +++ b/src/Client/Client.csproj @@ -0,0 +1,35 @@ + + + + net6.0 + FSH.BlazorWebAssembly.Client + FSH.BlazorWebAssembly.Client + service-worker-assets.js + true + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Client/Components/Common/CustomValidation.cs b/src/Client/Components/Common/CustomValidation.cs new file mode 100644 index 0000000..c0d47e8 --- /dev/null +++ b/src/Client/Components/Common/CustomValidation.cs @@ -0,0 +1,51 @@ +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Forms; + +namespace RewardsPlus.BlazorWebAssembly.Client.Components.Common; + +// See https://docs.microsoft.com/en-us/aspnet/core/blazor/forms-validation?view=aspnetcore-6.0#server-validation-with-a-validator-component +public class CustomValidation : ComponentBase +{ + private ValidationMessageStore? _messageStore; + + [CascadingParameter] + private EditContext? CurrentEditContext { get; set; } + + protected override void OnInitialized() + { + if (CurrentEditContext is null) + { + throw new InvalidOperationException( + $"{nameof(CustomValidation)} requires a cascading " + + $"parameter of type {nameof(EditContext)}. " + + $"For example, you can use {nameof(CustomValidation)} " + + $"inside an {nameof(EditForm)}."); + } + + _messageStore = new(CurrentEditContext); + + CurrentEditContext.OnValidationRequested += (s, e) => + _messageStore?.Clear(); + CurrentEditContext.OnFieldChanged += (s, e) => + _messageStore?.Clear(e.FieldIdentifier); + } + + public void DisplayErrors(IDictionary> errors) + { + if (CurrentEditContext is not null && errors is not null) + { + foreach (var err in errors) + { + _messageStore?.Add(CurrentEditContext.Field(err.Key), err.Value); + } + + CurrentEditContext.NotifyValidationStateChanged(); + } + } + + public void ClearErrors() + { + _messageStore?.Clear(); + CurrentEditContext?.NotifyValidationStateChanged(); + } +} \ No newline at end of file diff --git a/src/Client/Components/Common/ErrorHandler.razor b/src/Client/Components/Common/ErrorHandler.razor new file mode 100644 index 0000000..9467791 --- /dev/null +++ b/src/Client/Components/Common/ErrorHandler.razor @@ -0,0 +1,2 @@ +@inherits ErrorBoundary +@ChildContent \ No newline at end of file diff --git a/src/Client/Components/Common/ErrorHandler.razor.cs b/src/Client/Components/Common/ErrorHandler.razor.cs new file mode 100644 index 0000000..4c8ad99 --- /dev/null +++ b/src/Client/Components/Common/ErrorHandler.razor.cs @@ -0,0 +1,31 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Components.Common; + +public partial class ErrorHandler +{ + [Inject] + public IAuthenticationService AuthService { get; set; } = default!; + + public List _receivedExceptions = new(); + + protected override async Task OnErrorAsync(Exception exception) + { + _receivedExceptions.Add(exception); + switch (exception) + { + case UnauthorizedAccessException: + await AuthService.LogoutAsync(); + Snackbar.Add("Authentication Failed", Severity.Error); + break; + } + } + + public new void Recover() + { + _receivedExceptions.Clear(); + base.Recover(); + } +} \ No newline at end of file diff --git a/src/Client/Components/Common/FshCustomError.razor b/src/Client/Components/Common/FshCustomError.razor new file mode 100644 index 0000000..827318b --- /dev/null +++ b/src/Client/Components/Common/FshCustomError.razor @@ -0,0 +1 @@ +Oopsie !! 😔 \ No newline at end of file diff --git a/src/Client/Components/Common/FshTable.cs b/src/Client/Components/Common/FshTable.cs new file mode 100644 index 0000000..29f7983 --- /dev/null +++ b/src/Client/Components/Common/FshTable.cs @@ -0,0 +1,39 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Notifications; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Preferences; +using MediatR.Courier; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Components.Common; + +public class FshTable : MudTable +{ + [Inject] + private IClientPreferenceManager ClientPreferences { get; set; } = default!; + [Inject] + protected ICourier Courier { get; set; } = default!; + + protected override async Task OnInitializedAsync() + { + if (await ClientPreferences.GetPreference() is ClientPreference clientPreference) + { + SetTablePreference(clientPreference.TablePreference); + } + + Courier.SubscribeWeak>(wrapper => + { + SetTablePreference(wrapper.Notification); + StateHasChanged(); + }); + + await base.OnInitializedAsync(); + } + + private void SetTablePreference(FshTablePreference tablePreference) + { + Dense = tablePreference.IsDense; + Striped = tablePreference.IsStriped; + Bordered = tablePreference.HasBorder; + Hover = tablePreference.IsHoverable; + } +} \ No newline at end of file diff --git a/src/Client/Components/Common/FshTitle.razor b/src/Client/Components/Common/FshTitle.razor new file mode 100644 index 0000000..e696be9 --- /dev/null +++ b/src/Client/Components/Common/FshTitle.razor @@ -0,0 +1,8 @@ +@Title +@Description + +@code +{ + [Parameter] public string? Title { get; set; } + [Parameter] public string? Description { get; set; } +} \ No newline at end of file diff --git a/src/Client/Components/Common/PersonCard.razor b/src/Client/Components/Common/PersonCard.razor new file mode 100644 index 0000000..d17630e --- /dev/null +++ b/src/Client/Components/Common/PersonCard.razor @@ -0,0 +1,19 @@ + + + + @if (string.IsNullOrEmpty(this.ImageUri)) + { + @FullName?.ToUpper().FirstOrDefault() + + } + else + { + + } + + + @FullName + @Email + + + diff --git a/src/Client/Components/Common/PersonCard.razor.cs b/src/Client/Components/Common/PersonCard.razor.cs new file mode 100644 index 0000000..c0db50e --- /dev/null +++ b/src/Client/Components/Common/PersonCard.razor.cs @@ -0,0 +1,46 @@ +using System.Security.Claims; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Common; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; + +namespace RewardsPlus.BlazorWebAssembly.Client.Components.Common; + +public partial class PersonCard +{ + [Parameter] + public string? Class { get; set; } + [Parameter] + public string? Style { get; set; } + + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + + private string? UserId { get; set; } + private string? Email { get; set; } + private string? FullName { get; set; } + private string? ImageUri { get; set; } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + await LoadUserData(); + } + } + + private async Task LoadUserData() + { + var user = (await AuthState).User; + if (user.Identity?.IsAuthenticated == true) + { + if (string.IsNullOrEmpty(UserId)) + { + FullName = user.GetFullName(); + UserId = user.GetUserId(); + Email = user.GetEmail(); + ImageUri = string.IsNullOrEmpty(user?.GetImageUrl()) ? string.Empty : (Config[ConfigNames.ApiBaseUrl] + user?.GetImageUrl()); + StateHasChanged(); + } + } + } +} \ No newline at end of file diff --git a/src/Client/Components/Common/TablePager.razor b/src/Client/Components/Common/TablePager.razor new file mode 100644 index 0000000..c5fdc78 --- /dev/null +++ b/src/Client/Components/Common/TablePager.razor @@ -0,0 +1,3 @@ +@inject IStringLocalizer L + + \ No newline at end of file diff --git a/src/Client/Components/Dialogs/DeleteConfirmation.razor b/src/Client/Components/Dialogs/DeleteConfirmation.razor new file mode 100644 index 0000000..f08d440 --- /dev/null +++ b/src/Client/Components/Dialogs/DeleteConfirmation.razor @@ -0,0 +1,31 @@ +@inject IStringLocalizer L + + + + + + @L["Delete Confirmation"] + + + + @ContentText + + + @L["Cancel"] + @L["Confirm"] + + + +@code { + [CascadingParameter] + MudDialogInstance MudDialog { get; set; } = default!; + + [Parameter] + public string? ContentText { get; set; } + + void Submit() + { + MudDialog.Close(DialogResult.Ok(true)); + } + void Cancel() => MudDialog.Cancel(); +} \ No newline at end of file diff --git a/src/Client/Components/Dialogs/Logout.razor b/src/Client/Components/Dialogs/Logout.razor new file mode 100644 index 0000000..490049c --- /dev/null +++ b/src/Client/Components/Dialogs/Logout.razor @@ -0,0 +1,40 @@ +@namespace RewardsPlus.BlazorWebAssembly.Client.Shared.Dialogs + +@inject IStringLocalizer L +@inject IAuthenticationService AuthService + + + + + + @L["Logout Confirmation"] + + + + @ContentText + + + @L["Cancel"] + @ButtonText + + + +@code { + [Parameter] public string? ContentText { get; set; } + + [Parameter] public string? ButtonText { get; set; } + + [Parameter] public Color Color { get; set; } + + [CascadingParameter] MudDialogInstance MudDialog { get; set; } = default!; + + async Task Submit() + { + await AuthService.LogoutAsync(); + Snackbar.Add(@L["Logged out"], Severity.Info); + MudDialog.Close(DialogResult.Ok(true)); + } + + void Cancel() => + MudDialog.Cancel(); +} \ No newline at end of file diff --git a/src/Client/Components/EntityTable/AddEditModal.razor b/src/Client/Components/EntityTable/AddEditModal.razor new file mode 100644 index 0000000..ea086f5 --- /dev/null +++ b/src/Client/Components/EntityTable/AddEditModal.razor @@ -0,0 +1,51 @@ +@typeparam TRequest + +@inject IStringLocalizer L + + + + + + + @if (IsCreate) + { + + } + else + { + + } + @Title + + + + + + + + + @ChildContent(RequestModel) + + + + + + + @L["Cancel"] + + @if (IsCreate) + { + + @L["Save"] + + } + else + { + + @L["Update"] + + } + + + + \ No newline at end of file diff --git a/src/Client/Components/EntityTable/AddEditModal.razor.cs b/src/Client/Components/EntityTable/AddEditModal.razor.cs new file mode 100644 index 0000000..22514dc --- /dev/null +++ b/src/Client/Components/EntityTable/AddEditModal.razor.cs @@ -0,0 +1,49 @@ +using RewardsPlus.BlazorWebAssembly.Client.Components.Common; +using RewardsPlus.BlazorWebAssembly.Client.Shared; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Components.EntityTable; + +public partial class AddEditModal : IAddEditModal +{ + [Parameter] + [EditorRequired] + public RenderFragment ChildContent { get; set; } = default!; + [Parameter] + [EditorRequired] + public TRequest RequestModel { get; set; } = default!; + [Parameter] + [EditorRequired] + public Func SaveFunc { get; set; } = default!; + [Parameter] + public Func? OnInitializedFunc { get; set; } + [Parameter] + [EditorRequired] + public string Title { get; set; } = default!; + [Parameter] + public bool IsCreate { get; set; } + [Parameter] + public string? SuccessMessage { get; set; } + + [CascadingParameter] + private MudDialogInstance MudDialog { get; set; } = default!; + + private CustomValidation? _customValidation; + + public void ForceRender() => StateHasChanged(); + + protected override Task OnInitializedAsync() => + OnInitializedFunc is not null + ? OnInitializedFunc() + : Task.CompletedTask; + + private async Task SaveAsync() + { + if (await ApiHelper.ExecuteCallGuardedAsync( + () => SaveFunc(RequestModel), Snackbar, _customValidation, SuccessMessage)) + { + MudDialog.Close(); + } + } +} \ No newline at end of file diff --git a/src/Client/Components/EntityTable/EntityClientTableContext.cs b/src/Client/Components/EntityTable/EntityClientTableContext.cs new file mode 100644 index 0000000..d15d735 --- /dev/null +++ b/src/Client/Components/EntityTable/EntityClientTableContext.cs @@ -0,0 +1,67 @@ +namespace RewardsPlus.BlazorWebAssembly.Client.Components.EntityTable; + +/// +/// Initialization Context for the EntityTable Component. +/// Use this one if you want to use Client Paging, Sorting and Filtering. +/// +public class EntityClientTableContext + : EntityTableContext +{ + /// + /// A function that loads all the data for the table from the api and returns a ListResult of TEntity. + /// + public Func?>> LoadDataFunc { get; } + + /// + /// A function that returns a boolean which indicates whether the supplied entity meets the search criteria + /// (the supplied string is the search string entered). + /// + public Func SearchFunc { get; } + + public EntityClientTableContext( + List> fields, + Func?>> loadDataFunc, + Func searchFunc, + Func? idFunc = null, + Func>? getDefaultsFunc = null, + Func? createFunc = null, + Func>? getDetailsFunc = null, + Func? updateFunc = null, + Func? deleteFunc = null, + string? entityName = null, + string? entityNamePlural = null, + string? entityResource = null, + string? searchAction = null, + string? createAction = null, + string? updateAction = null, + string? deleteAction = null, + string? exportAction = null, + Func? editFormInitializedFunc = null, + Func? hasExtraActionsFunc = null, + Func? canUpdateEntityFunc = null, + Func? canDeleteEntityFunc = null) + : base( + fields, + idFunc, + getDefaultsFunc, + createFunc, + getDetailsFunc, + updateFunc, + deleteFunc, + entityName, + entityNamePlural, + entityResource, + searchAction, + createAction, + updateAction, + deleteAction, + exportAction, + editFormInitializedFunc, + hasExtraActionsFunc, + canUpdateEntityFunc, + canDeleteEntityFunc) + { + LoadDataFunc = loadDataFunc; + SearchFunc = searchFunc; + } +} \ No newline at end of file diff --git a/src/Client/Components/EntityTable/EntityField.cs b/src/Client/Components/EntityTable/EntityField.cs new file mode 100644 index 0000000..13797c3 --- /dev/null +++ b/src/Client/Components/EntityTable/EntityField.cs @@ -0,0 +1,35 @@ +using Microsoft.AspNetCore.Components; + +namespace RewardsPlus.BlazorWebAssembly.Client.Components.EntityTable; + +public record EntityField(Func ValueFunc, string DisplayName, string SortLabel = "", Type? Type = null, RenderFragment? Template = null) +{ + /// + /// A function that returns the actual value of this field from the supplied entity. + /// + public Func ValueFunc { get; init; } = ValueFunc; + + /// + /// The string that's shown on the UI for this field. + /// + public string DisplayName { get; init; } = DisplayName; + + /// + /// The string that's sent to the api as property to sort on for this field. + /// This is only relevant when using server side sorting. + /// + public string SortLabel { get; init; } = SortLabel; + + /// + /// The type of the field. Default is string, but when boolean, it shows as a checkbox. + /// + public Type? Type { get; init; } = Type; + + /// + /// When supplied this template will be used for this field in stead of the default template. + /// For an example on how to do this, see . + /// + public RenderFragment? Template { get; init; } = Template; + + public bool CheckedForSearch { get; set; } = true; +} \ No newline at end of file diff --git a/src/Client/Components/EntityTable/EntityServerTableContext.cs b/src/Client/Components/EntityTable/EntityServerTableContext.cs new file mode 100644 index 0000000..8ce3fbe --- /dev/null +++ b/src/Client/Components/EntityTable/EntityServerTableContext.cs @@ -0,0 +1,73 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; + +namespace RewardsPlus.BlazorWebAssembly.Client.Components.EntityTable; + +/// +/// Initialization Context for the EntityTable Component. +/// Use this one if you want to use Server Paging, Sorting and Filtering. +/// +public class EntityServerTableContext + : EntityTableContext +{ + /// + /// A function that loads the specified page from the api with the specified search criteria + /// and returns a PaginatedResult of TEntity. + /// + public Func>> SearchFunc { get; } + + /// + /// A function that exports the specified data from the API. + /// + public Func>? ExportFunc { get; } + + public bool EnableAdvancedSearch { get; } + + public EntityServerTableContext( + List> fields, + Func>> searchFunc, + Func>? exportFunc = null, + bool enableAdvancedSearch = false, + Func? idFunc = null, + Func>? getDefaultsFunc = null, + Func? createFunc = null, + Func>? getDetailsFunc = null, + Func? updateFunc = null, + Func? deleteFunc = null, + string? entityName = null, + string? entityNamePlural = null, + string? entityResource = null, + string? searchAction = null, + string? createAction = null, + string? updateAction = null, + string? deleteAction = null, + string? exportAction = null, + Func? editFormInitializedFunc = null, + Func? hasExtraActionsFunc = null, + Func? canUpdateEntityFunc = null, + Func? canDeleteEntityFunc = null) + : base( + fields, + idFunc, + getDefaultsFunc, + createFunc, + getDetailsFunc, + updateFunc, + deleteFunc, + entityName, + entityNamePlural, + entityResource, + searchAction, + createAction, + updateAction, + deleteAction, + exportAction, + editFormInitializedFunc, + hasExtraActionsFunc, + canUpdateEntityFunc, + canDeleteEntityFunc) + { + SearchFunc = searchFunc; + ExportFunc = exportFunc; + EnableAdvancedSearch = enableAdvancedSearch; + } +} \ No newline at end of file diff --git a/src/Client/Components/EntityTable/EntityTable.razor b/src/Client/Components/EntityTable/EntityTable.razor new file mode 100644 index 0000000..68221bd --- /dev/null +++ b/src/Client/Components/EntityTable/EntityTable.razor @@ -0,0 +1,158 @@ +@typeparam TEntity +@typeparam TId +@typeparam TRequest + +@inject IJSRuntime JS +@inject IStringLocalizer L + + + + + + + @if (_canSearch && (Context.AdvancedSearchEnabled || AdvancedSearchContent is not null)) + { + + + + @if (Context.AdvancedSearchEnabled) + { +
+ + @foreach (var field in Context.Fields) + { + + } +
+ } + @AdvancedSearchContent + +
+ } + + + + +
+ @if (_canCreate) + { + @L["Create"] + } + @if (_canExport) + { + @L["Export"] + } + @L["Reload"] +
+ + @if (_canSearch && !_advancedSearchExpanded) + { + + + } +
+ + + @if (Context.Fields is not null) + { + foreach (var field in Context.Fields) + { + + @if (Context.IsClientContext) + { + @field.DisplayName + } + else + { + @field.DisplayName + } + + } + } + @L["Actions"] + + + + @foreach (var field in Context.Fields) + { + + @if (field.Template is not null) + { + @field.Template(context) + } + else if (field.Type == typeof(bool)) + { + + } + else + { + + } + + } + + @if (ActionsContent is not null) + { + @ActionsContent(context) + } + else if (HasActions) + { + + @if (CanUpdateEntity(context)) + { + @L["Edit"] + } + @if (CanDeleteEntity(context)) + { + @L["Delete"] + } + @if (ExtraActions is not null) + { + @ExtraActions(context) + } + + } + else + { + + @L["No Allowed Actions"] + + } + + + + + + + +
+ +
+ + + +
\ No newline at end of file diff --git a/src/Client/Components/EntityTable/EntityTable.razor.cs b/src/Client/Components/EntityTable/EntityTable.razor.cs new file mode 100644 index 0000000..3e87773 --- /dev/null +++ b/src/Client/Components/EntityTable/EntityTable.razor.cs @@ -0,0 +1,321 @@ +using RewardsPlus.BlazorWebAssembly.Client.Components.Dialogs; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth; +using RewardsPlus.BlazorWebAssembly.Client.Shared; +using Mapster; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; +using Microsoft.JSInterop; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Components.EntityTable; + +public partial class EntityTable + where TRequest : new() +{ + [Parameter] + [EditorRequired] + public EntityTableContext Context { get; set; } = default!; + + [Parameter] + public bool Loading { get; set; } + + [Parameter] + public string? SearchString { get; set; } + [Parameter] + public EventCallback SearchStringChanged { get; set; } + + [Parameter] + public RenderFragment? AdvancedSearchContent { get; set; } + + [Parameter] + public RenderFragment? ActionsContent { get; set; } + [Parameter] + public RenderFragment? ExtraActions { get; set; } + [Parameter] + public RenderFragment? ChildRowContent { get; set; } + + [Parameter] + public RenderFragment? EditFormContent { get; set; } + + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + [Inject] + protected IAuthorizationService AuthService { get; set; } = default!; + + private bool _canSearch; + private bool _canCreate; + private bool _canUpdate; + private bool _canDelete; + private bool _canExport; + + private bool _advancedSearchExpanded; + + private MudTable _table = default!; + private IEnumerable? _entityList; + private int _totalItems; + + protected override async Task OnInitializedAsync() + { + var state = await AuthState; + _canSearch = await CanDoActionAsync(Context.SearchAction, state); + _canCreate = await CanDoActionAsync(Context.CreateAction, state); + _canUpdate = await CanDoActionAsync(Context.UpdateAction, state); + _canDelete = await CanDoActionAsync(Context.DeleteAction, state); + _canExport = await CanDoActionAsync(Context.ExportAction, state); + + await LocalLoadDataAsync(); + } + + public Task ReloadDataAsync() => + Context.IsClientContext + ? LocalLoadDataAsync() + : ServerLoadDataAsync(); + + private async Task CanDoActionAsync(string? action, AuthenticationState state) => + !string.IsNullOrWhiteSpace(action) && + ((bool.TryParse(action, out bool isTrue) && isTrue) || // check if action equals "True", then it's allowed + (Context.EntityResource is { } resource && await AuthService.HasPermissionAsync(state.User, action, resource))); + + private bool HasActions => _canUpdate || _canDelete || (Context.HasExtraActionsFunc is not null && Context.HasExtraActionsFunc()); + private bool CanUpdateEntity(TEntity entity) => _canUpdate && (Context.CanUpdateEntityFunc is null || Context.CanUpdateEntityFunc(entity)); + private bool CanDeleteEntity(TEntity entity) => _canDelete && (Context.CanDeleteEntityFunc is null || Context.CanDeleteEntityFunc(entity)); + + // Client side paging/filtering + private bool LocalSearch(TEntity entity) => + Context.ClientContext?.SearchFunc is { } searchFunc + ? searchFunc(SearchString, entity) + : string.IsNullOrWhiteSpace(SearchString); + + private async Task LocalLoadDataAsync() + { + if (Loading || Context.ClientContext is null) + { + return; + } + + Loading = true; + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => Context.ClientContext.LoadDataFunc(), Snackbar) + is List result) + { + _entityList = result; + } + + Loading = false; + } + + // Server Side paging/filtering + + private async Task OnSearchStringChanged(string? text = null) + { + await SearchStringChanged.InvokeAsync(SearchString); + + await ServerLoadDataAsync(); + } + + private async Task ServerLoadDataAsync() + { + if (Context.IsServerContext) + { + await _table.ReloadServerData(); + } + } + + private Func>>? ServerReloadFunc => + Context.IsServerContext ? ServerReload : null; + + private async Task> ServerReload(TableState state) + { + if (!Loading && Context.ServerContext is not null) + { + Loading = true; + + var filter = GetPaginationFilter(state); + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => Context.ServerContext.SearchFunc(filter), Snackbar) + is { } result) + { + _totalItems = result.TotalCount; + _entityList = result.Data; + } + + Loading = false; + } + + return new TableData { TotalItems = _totalItems, Items = _entityList }; + } + + private async Task ExportAsync() + { + if (!Loading && Context.ServerContext is not null) + { + if (Context.ServerContext.ExportFunc is not null) + { + Loading = true; + + var filter = GetBaseFilter(); + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => Context.ServerContext.ExportFunc(filter), Snackbar) + is { } result) + { + using var streamRef = new DotNetStreamReference(result.Stream); + await JS.InvokeVoidAsync("downloadFileFromStream", $"{Context.EntityNamePlural}.xlsx", streamRef); + } + + Loading = false; + } + } + } + + private PaginationFilter GetPaginationFilter(TableState state) + { + string[]? orderings = null; + if (!string.IsNullOrEmpty(state.SortLabel)) + { + orderings = state.SortDirection == SortDirection.None + ? new[] { $"{state.SortLabel}" } + : new[] { $"{state.SortLabel} {state.SortDirection}" }; + } + + var filter = new PaginationFilter + { + PageSize = state.PageSize, + PageNumber = state.Page + 1, + Keyword = SearchString, + OrderBy = orderings ?? Array.Empty() + }; + + if (!Context.AllColumnsChecked) + { + filter.AdvancedSearch = new() + { + Fields = Context.SearchFields, + Keyword = filter.Keyword + }; + filter.Keyword = null; + } + + return filter; + } + + private BaseFilter GetBaseFilter() + { + var filter = new BaseFilter + { + Keyword = SearchString, + }; + + if (!Context.AllColumnsChecked) + { + filter.AdvancedSearch = new() + { + Fields = Context.SearchFields, + Keyword = filter.Keyword + }; + filter.Keyword = null; + } + + return filter; + } + + private async Task InvokeModal(TEntity? entity = default) + { + bool isCreate = entity is null; + + var parameters = new DialogParameters() + { + { nameof(AddEditModal.ChildContent), EditFormContent }, + { nameof(AddEditModal.OnInitializedFunc), Context.EditFormInitializedFunc }, + { nameof(AddEditModal.IsCreate), isCreate } + }; + + Func saveFunc; + TRequest requestModel; + string title, successMessage; + + if (isCreate) + { + _ = Context.CreateFunc ?? throw new InvalidOperationException("CreateFunc can't be null!"); + + saveFunc = Context.CreateFunc; + + requestModel = + Context.GetDefaultsFunc is not null + && await ApiHelper.ExecuteCallGuardedAsync( + () => Context.GetDefaultsFunc(), Snackbar) + is { } defaultsResult + ? defaultsResult + : new TRequest(); + + title = $"{L["Create"]} {Context.EntityName}"; + successMessage = $"{Context.EntityName} {L["Created"]}"; + } + else + { + _ = Context.IdFunc ?? throw new InvalidOperationException("IdFunc can't be null!"); + _ = Context.UpdateFunc ?? throw new InvalidOperationException("UpdateFunc can't be null!"); + + var id = Context.IdFunc(entity!); + + saveFunc = request => Context.UpdateFunc(id, request); + + requestModel = + Context.GetDetailsFunc is not null + && await ApiHelper.ExecuteCallGuardedAsync( + () => Context.GetDetailsFunc(id!), + Snackbar) + is { } detailsResult + ? detailsResult + : entity!.Adapt(); + + title = $"{L["Edit"]} {Context.EntityName}"; + successMessage = $"{Context.EntityName} {L["Updated"]}"; + } + + parameters.Add(nameof(AddEditModal.SaveFunc), saveFunc); + parameters.Add(nameof(AddEditModal.RequestModel), requestModel); + parameters.Add(nameof(AddEditModal.Title), title); + parameters.Add(nameof(AddEditModal.SuccessMessage), successMessage); + + var dialog = DialogService.ShowModal>(parameters); + + Context.SetAddEditModalRef(dialog); + + var result = await dialog.Result; + + if (!result.Cancelled) + { + await ReloadDataAsync(); + } + } + + private async Task Delete(TEntity entity) + { + _ = Context.IdFunc ?? throw new InvalidOperationException("IdFunc can't be null!"); + TId id = Context.IdFunc(entity); + + string deleteContent = L["You're sure you want to delete {0} with id '{1}'?"]; + var parameters = new DialogParameters + { + { nameof(DeleteConfirmation.ContentText), string.Format(deleteContent, Context.EntityName, id) } + }; + var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true, DisableBackdropClick = true }; + var dialog = DialogService.Show(L["Delete"], parameters, options); + var result = await dialog.Result; + if (!result.Cancelled) + { + _ = Context.DeleteFunc ?? throw new InvalidOperationException("DeleteFunc can't be null!"); + + await ApiHelper.ExecuteCallGuardedAsync( + () => Context.DeleteFunc(id), + Snackbar); + + await ReloadDataAsync(); + } + } +} \ No newline at end of file diff --git a/src/Client/Components/EntityTable/EntityTableContext.cs b/src/Client/Components/EntityTable/EntityTableContext.cs new file mode 100644 index 0000000..6ff1033 --- /dev/null +++ b/src/Client/Components/EntityTable/EntityTableContext.cs @@ -0,0 +1,197 @@ +using RewardsPlus.WebApi.Shared.Authorization; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Components.EntityTable; + +/// +/// Abstract base class for the initialization Context of the EntityTable Component. +/// +/// The type of the entity. +/// The type of the id of the entity. +/// The type of the Request which is used on the AddEditModal and which is sent with the CreateFunc and UpdateFunc. +public abstract class EntityTableContext +{ + /// + /// The columns you want to display on the table. + /// + public List> Fields { get; } + + /// + /// A function that returns the Id of the entity. This is only needed when using the CRUD functionality. + /// + public Func? IdFunc { get; } + + /// + /// A function that executes the GetDefaults method on the api (or supplies defaults locally) and returns + /// a Task of Result of TRequest. When not supplied, a TRequest is simply newed up. + /// No need to check for error messages or api exceptions. These are automatically handled by the component. + /// + public Func>? GetDefaultsFunc { get; } + + /// + /// A function that executes the Create method on the api with the supplied entity and returns a Task of Result. + /// No need to check for error messages or api exceptions. These are automatically handled by the component. + /// + public Func? CreateFunc { get; } + + /// + /// A function that executes the GetDetails method on the api with the supplied Id and returns a Task of Result of TRequest. + /// No need to check for error messages or api exceptions. These are automatically handled by the component. + /// When not supplied, the TEntity out of the _entityList is supplied using the IdFunc and converted using mapster. + /// + public Func>? GetDetailsFunc { get; } + + /// + /// A function that executes the Update method on the api with the supplied entity and returns a Task of Result. + /// When not supplied, the TEntity from the list is mapped to TCreateRequest using mapster. + /// No need to check for error messages or api exceptions. These are automatically handled by the component. + /// + public Func? UpdateFunc { get; } + + /// + /// A function that executes the Delete method on the api with the supplied entity id and returns a Task of Result. + /// No need to check for error messages or api exceptions. These are automatically handled by the component. + /// + public Func? DeleteFunc { get; } + + /// + /// The name of the entity. This is used in the title of the add/edit modal and delete confirmation. + /// + public string? EntityName { get; } + + /// + /// The plural name of the entity. This is used in the "Search for ..." placeholder. + /// + public string? EntityNamePlural { get; } + + /// + /// The FSHResource that is representing this entity. This is used in combination with the xxActions to check for permissions. + /// + public string? EntityResource { get; } + + /// + /// The FSHAction name of the search permission. This is FSHAction.Search by default. + /// When empty, no search functionality will be available. + /// When the string is "true", search funtionality will be enabled, + /// otherwise it will only be enabled if the user has permission for this action on the EntityResource. + /// + public string SearchAction { get; } + + /// + /// The permission name of the create permission. This is FSHAction.Create by default. + /// When empty, no create functionality will be available. + /// When the string "true", create funtionality will be enabled, + /// otherwise it will only be enabled if the user has permission for this action on the EntityResource. + /// + public string CreateAction { get; } + + /// + /// The permission name of the update permission. This is FSHAction.Update by default. + /// When empty, no update functionality will be available. + /// When the string is "true", update funtionality will be enabled, + /// otherwise it will only be enabled if the user has permission for this action on the EntityResource. + /// + public string UpdateAction { get; } + + /// + /// The permission name of the delete permission. This is FSHAction.Delete by default. + /// When empty, no delete functionality will be available. + /// When the string is "true", delete funtionality will be enabled, + /// otherwise it will only be enabled if the user has permission for this action on the EntityResource. + /// + public string DeleteAction { get; } + + /// + /// The permission name of the export permission. This is FSHAction.Export by default. + /// + public string ExportAction { get; } + + /// + /// Use this if you want to run initialization during OnInitialized of the AddEdit form. + /// + public Func? EditFormInitializedFunc { get; } + + /// + /// Use this if you want to check for permissions of content in the ExtraActions RenderFragment. + /// The extra actions won't be available when this returns false. + /// + public Func? HasExtraActionsFunc { get; set; } + + /// + /// Use this if you want to disable the update functionality for specific entities in the table. + /// + public Func? CanUpdateEntityFunc { get; set; } + + /// + /// Use this if you want to disable the delete functionality for specific entities in the table. + /// + public Func? CanDeleteEntityFunc { get; set; } + + public EntityTableContext( + List> fields, + Func? idFunc, + Func>? getDefaultsFunc, + Func? createFunc, + Func>? getDetailsFunc, + Func? updateFunc, + Func? deleteFunc, + string? entityName, + string? entityNamePlural, + string? entityResource, + string? searchAction, + string? createAction, + string? updateAction, + string? deleteAction, + string? exportAction, + Func? editFormInitializedFunc, + Func? hasExtraActionsFunc, + Func? canUpdateEntityFunc, + Func? canDeleteEntityFunc) + { + EntityResource = entityResource; + Fields = fields; + EntityName = entityName; + EntityNamePlural = entityNamePlural; + IdFunc = idFunc; + GetDefaultsFunc = getDefaultsFunc; + CreateFunc = createFunc; + GetDetailsFunc = getDetailsFunc; + UpdateFunc = updateFunc; + DeleteFunc = deleteFunc; + SearchAction = searchAction ?? FSHAction.Search; + CreateAction = createAction ?? FSHAction.Create; + UpdateAction = updateAction ?? FSHAction.Update; + DeleteAction = deleteAction ?? FSHAction.Delete; + ExportAction = exportAction ?? FSHAction.Export; + EditFormInitializedFunc = editFormInitializedFunc; + HasExtraActionsFunc = hasExtraActionsFunc; + CanUpdateEntityFunc = canUpdateEntityFunc; + CanDeleteEntityFunc = canDeleteEntityFunc; + } + + // AddEdit modal + private IDialogReference? _addEditModalRef; + + internal void SetAddEditModalRef(IDialogReference dialog) => + _addEditModalRef = dialog; + + public IAddEditModal AddEditModal => + _addEditModalRef?.Dialog as IAddEditModal + ?? throw new InvalidOperationException("AddEditModal is only available when the modal is shown."); + + // Shortcuts + public EntityClientTableContext? ClientContext => this as EntityClientTableContext; + public EntityServerTableContext? ServerContext => this as EntityServerTableContext; + public bool IsClientContext => ClientContext is not null; + public bool IsServerContext => ServerContext is not null; + + // Advanced Search + public bool AllColumnsChecked => + Fields.All(f => f.CheckedForSearch); + public void AllColumnsCheckChanged(bool checkAll) => + Fields.ForEach(f => f.CheckedForSearch = checkAll); + public bool AdvancedSearchEnabled => + ServerContext?.EnableAdvancedSearch is true; + public List SearchFields => + Fields.Where(f => f.CheckedForSearch).Select(f => f.SortLabel).ToList(); +} \ No newline at end of file diff --git a/src/Client/Components/EntityTable/IAddEditModal.cs b/src/Client/Components/EntityTable/IAddEditModal.cs new file mode 100644 index 0000000..eb7d43f --- /dev/null +++ b/src/Client/Components/EntityTable/IAddEditModal.cs @@ -0,0 +1,8 @@ +namespace RewardsPlus.BlazorWebAssembly.Client.Components.EntityTable; + +public interface IAddEditModal +{ + TRequest RequestModel { get; } + bool IsCreate { get; } + void ForceRender(); +} \ No newline at end of file diff --git a/src/Client/Components/EntityTable/PaginationResponse.cs b/src/Client/Components/EntityTable/PaginationResponse.cs new file mode 100644 index 0000000..b78f37b --- /dev/null +++ b/src/Client/Components/EntityTable/PaginationResponse.cs @@ -0,0 +1,9 @@ +namespace RewardsPlus.BlazorWebAssembly.Client.Components.EntityTable; + +public class PaginationResponse +{ + public List Data { get; set; } = default!; + public int TotalCount { get; set; } + public int CurrentPage { get; set; } = 1; + public int PageSize { get; set; } = 10; +} diff --git a/src/Client/Components/Localization/LanguageSelector.razor b/src/Client/Components/Localization/LanguageSelector.razor new file mode 100644 index 0000000..0305761 --- /dev/null +++ b/src/Client/Components/Localization/LanguageSelector.razor @@ -0,0 +1,41 @@ +@inject IStringLocalizer L + + + + @foreach (var language in LocalizationConstants.SupportedLanguages) + { + if (language.Code == CurrentLanguage) + { + @L[language.DisplayName] + } + else + { + @L[language.DisplayName] + } + } + + + +@code { + public string? CurrentLanguage { get; set; } = "en-US"; + + protected override async Task OnInitializedAsync() + { + var currentPreference = await ClientPreferences.GetPreference() as ClientPreference; + if (currentPreference != null) + { + CurrentLanguage = currentPreference.LanguageCode; + } + else + { + CurrentLanguage = "en-US"; + } + + } + private async Task ChangeLanguageAsync(string languageCode) + { + var result = await ClientPreferences.ChangeLanguageAsync(languageCode); + Navigation.NavigateTo(Navigation.Uri, forceLoad: true); + } +} \ No newline at end of file diff --git a/src/Client/Components/Notifications/NotificationConnection.razor b/src/Client/Components/Notifications/NotificationConnection.razor new file mode 100644 index 0000000..6d04cdf --- /dev/null +++ b/src/Client/Components/Notifications/NotificationConnection.razor @@ -0,0 +1,3 @@ + + @ChildContent + \ No newline at end of file diff --git a/src/Client/Components/Notifications/NotificationConnection.razor.cs b/src/Client/Components/Notifications/NotificationConnection.razor.cs new file mode 100644 index 0000000..b7e79d4 --- /dev/null +++ b/src/Client/Components/Notifications/NotificationConnection.razor.cs @@ -0,0 +1,153 @@ +using System.Net; +using System.Reflection; +using System.Text.Json; +using System.Text.Json.Nodes; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Common; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Notifications; +using RewardsPlus.WebApi.Shared.Notifications; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; +using Microsoft.AspNetCore.SignalR.Client; + +namespace RewardsPlus.BlazorWebAssembly.Client.Components.Notifications; + +public partial class NotificationConnection : IDisposable, IAsyncDisposable +{ + [Parameter] + public RenderFragment ChildContent { get; set; } = default!; + [Inject] + private IAccessTokenProvider TokenProvider { get; set; } = default!; + [Inject] + private INotificationPublisher Publisher { get; set; } = default!; + [Inject] + private IAuthenticationService AuthService { get; set; } = default!; + [Inject] + private ILogger Logger { get; set; } = default!; + + private readonly CancellationTokenSource _cts = new(); + private IDisposable? _subscription; + private HubConnection? _hubConnection; + + public ConnectionState ConnectionState => + _hubConnection?.State switch + { + HubConnectionState.Connected => ConnectionState.Connected, + HubConnectionState.Disconnected => ConnectionState.Disconnected, + _ => ConnectionState.Connecting + }; + + public string? ConnectionId => _hubConnection?.ConnectionId; + + protected override Task OnInitializedAsync() + { + _hubConnection = new HubConnectionBuilder() + .WithUrl($"{Config[ConfigNames.ApiBaseUrl]}notifications", options => + options.AccessTokenProvider = + () => TokenProvider.GetAccessTokenAsync()) + .WithAutomaticReconnect(new IndefiniteRetryPolicy()) + .Build(); + + _hubConnection.Reconnecting += ex => + OnConnectionStateChangedAsync(ConnectionState.Connecting, ex?.Message); + + _hubConnection.Reconnected += id => + OnConnectionStateChangedAsync(ConnectionState.Connected, id); + + _hubConnection.Closed += async ex => + { + await OnConnectionStateChangedAsync(ConnectionState.Disconnected, ex?.Message); + + // This shouldn't happen with the IndefiniteRetryPolicy configured above, + // but just in case it does, we wait a bit and restart the connection again. + await Task.Delay(5000, _cts.Token); + await ConnectWithRetryAsync(_cts.Token); + }; + + _subscription = _hubConnection.On(NotificationConstants.NotificationFromServer, (notificationTypeName, notificationJson) => + { + if (Assembly.GetAssembly(typeof(INotificationMessage))!.GetType(notificationTypeName) + is { } notificationType + && notificationJson.Deserialize( + notificationType, + new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }) + is INotificationMessage notification) + { + return Publisher.PublishAsync(notification); + } + + Logger.LogError("Invalid Notification Received ({name}).", notificationTypeName); + + return Task.CompletedTask; + }); + + // launch the signalR connection in the background. + // see https://www.dotnetcurry.com/aspnet-core/realtime-app-using-blazor-webassembly-signalr-csharp9 + _ = ConnectWithRetryAsync(_cts.Token); + + return base.OnInitializedAsync(); + } + + protected virtual Task OnConnectionStateChangedAsync(ConnectionState state, string? message) + { + return Publisher.PublishAsync(new ConnectionStateChanged(state, message)); + } + + private async Task ConnectWithRetryAsync(CancellationToken cancellationToken) + { + _ = _hubConnection ?? throw new InvalidOperationException("HubConnection can't be null."); + + // Keep trying to until we can start or the token is canceled. + while (true) + { + try + { + await _hubConnection.StartAsync(cancellationToken); + await OnConnectionStateChangedAsync(ConnectionState.Connected, _hubConnection.ConnectionId); + return; + } + catch when (cancellationToken.IsCancellationRequested) + { + return; + } + catch (HttpRequestException requestException) when (requestException.StatusCode == HttpStatusCode.Unauthorized) + { + // This shouldn't happen, but just in case, redirect to logout. + await AuthService.LogoutAsync(); + return; + } + catch + { + // Try again in a few seconds. This could be an incremental interval + await Task.Delay(5000, cancellationToken); + } + } + } + + public void Dispose() + { + _cts.Cancel(); + _cts.Dispose(); + _subscription?.Dispose(); + } + + public async ValueTask DisposeAsync() + { + if (_hubConnection is not null) + { + await _hubConnection.DisposeAsync(); + } + } +} + +internal class IndefiniteRetryPolicy : IRetryPolicy +{ + public TimeSpan? NextRetryDelay(RetryContext retryContext) => + retryContext.PreviousRetryCount switch + { + 0 => TimeSpan.Zero, + 1 => TimeSpan.FromSeconds(2), + 2 => TimeSpan.FromSeconds(5), + _ => TimeSpan.FromSeconds(10) + }; +} \ No newline at end of file diff --git a/src/Client/Components/Notifications/NotificationConnectionStatus.razor b/src/Client/Components/Notifications/NotificationConnectionStatus.razor new file mode 100644 index 0000000..78bea4a --- /dev/null +++ b/src/Client/Components/Notifications/NotificationConnectionStatus.razor @@ -0,0 +1,49 @@ +@inject ICourier Courier + + + + + +@code { + public string TooltipText { get; set; } = "No Connection"; + public string Icon { get; set; } = Icons.Filled.SignalWifi0Bar; + public Color IconColor { get; set; } = Color.Error; + + [CascadingParameter] private NotificationConnection _notifications { get; set; } = default!; + + protected override void OnInitialized() + { + SetConnectionState(_notifications.ConnectionState, _notifications.ConnectionId); + + Courier.SubscribeWeak>(wrapper => + { + SetConnectionState(wrapper.Notification.State, wrapper.Notification.Message); + StateHasChanged(); + }); + } + + private void SetConnectionState(ConnectionState state, string? message) + { + switch (state) + { + case ConnectionState.Connected: + TooltipText = $"Connected to Server with ConnectionId {message}"; + Icon = @Icons.Filled.SignalWifiStatusbar4Bar; + IconColor = Color.Success; + break; + + case ConnectionState.Connecting: + TooltipText = $"(Re)connecting... ({message})."; + Icon = @Icons.Filled.SignalWifiStatusbarConnectedNoInternet4; + IconColor = Color.Warning; + break; + + case ConnectionState.Disconnected: + TooltipText = $"Connection Closed ({message})."; + Icon = @Icons.Filled.SignalWifiOff; + IconColor = Color.Error; + break; + } + StateHasChanged(); + } +} \ No newline at end of file diff --git a/src/Client/Components/ThemeManager/ColorPanel.razor b/src/Client/Components/ThemeManager/ColorPanel.razor new file mode 100644 index 0000000..2b90017 --- /dev/null +++ b/src/Client/Components/ThemeManager/ColorPanel.razor @@ -0,0 +1,27 @@ + + +
+ @ColorType + + +
+
+ + + + + @foreach (var color in Colors) + { + + +
+
+
+
+ } +
+
+
+
+
\ No newline at end of file diff --git a/src/Client/Components/ThemeManager/ColorPanel.razor.cs b/src/Client/Components/ThemeManager/ColorPanel.razor.cs new file mode 100644 index 0000000..3c899cc --- /dev/null +++ b/src/Client/Components/ThemeManager/ColorPanel.razor.cs @@ -0,0 +1,24 @@ +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Components.ThemeManager; + +public partial class ColorPanel +{ + [Parameter] + public List Colors { get; set; } = new(); + + [Parameter] + public string ColorType { get; set; } = string.Empty; + + [Parameter] + public Color CurrentColor { get; set; } + + [Parameter] + public EventCallback OnColorClicked { get; set; } + + protected async Task ColorClicked(string color) + { + await OnColorClicked.InvokeAsync(color); + } +} \ No newline at end of file diff --git a/src/Client/Components/ThemeManager/DarkModePanel.razor b/src/Client/Components/ThemeManager/DarkModePanel.razor new file mode 100644 index 0000000..1f983fc --- /dev/null +++ b/src/Client/Components/ThemeManager/DarkModePanel.razor @@ -0,0 +1,17 @@ + + +
+ @if (_isDarkMode) + { + Light Mode + } + else + { + Dark Mode + } + +
+
+
\ No newline at end of file diff --git a/src/Client/Components/ThemeManager/DarkModePanel.razor.cs b/src/Client/Components/ThemeManager/DarkModePanel.razor.cs new file mode 100644 index 0000000..70ae348 --- /dev/null +++ b/src/Client/Components/ThemeManager/DarkModePanel.razor.cs @@ -0,0 +1,24 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Preferences; +using Microsoft.AspNetCore.Components; + +namespace RewardsPlus.BlazorWebAssembly.Client.Components.ThemeManager; + +public partial class DarkModePanel +{ + private bool _isDarkMode; + + protected override async Task OnInitializedAsync() + { + if (await ClientPreferences.GetPreference() is not ClientPreference themePreference) themePreference = new ClientPreference(); + _isDarkMode = themePreference.IsDarkMode; + } + + [Parameter] + public EventCallback OnIconClicked { get; set; } + + private async Task ToggleDarkMode() + { + _isDarkMode = !_isDarkMode; + await OnIconClicked.InvokeAsync(_isDarkMode); + } +} \ No newline at end of file diff --git a/src/Client/Components/ThemeManager/RadiusPanel.razor b/src/Client/Components/ThemeManager/RadiusPanel.razor new file mode 100644 index 0000000..56e42f2 --- /dev/null +++ b/src/Client/Components/ThemeManager/RadiusPanel.razor @@ -0,0 +1,15 @@ + + +
+ Border Radius + @Radius.ToString() + +
+
+ + + @Radius.ToString() + +
\ No newline at end of file diff --git a/src/Client/Components/ThemeManager/RadiusPanel.razor.cs b/src/Client/Components/ThemeManager/RadiusPanel.razor.cs new file mode 100644 index 0000000..5ad40bd --- /dev/null +++ b/src/Client/Components/ThemeManager/RadiusPanel.razor.cs @@ -0,0 +1,28 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Preferences; +using Microsoft.AspNetCore.Components; + +namespace RewardsPlus.BlazorWebAssembly.Client.Components.ThemeManager; + +public partial class RadiusPanel +{ + [Parameter] + public double Radius { get; set; } + + [Parameter] + public double MaxValue { get; set; } = 30; + + [Parameter] + public EventCallback OnSliderChanged { get; set; } + + protected override async Task OnInitializedAsync() + { + if (await ClientPreferences.GetPreference() is not ClientPreference themePreference) themePreference = new ClientPreference(); + Radius = themePreference.BorderRadius; + } + + private async Task ChangedSelection(ChangeEventArgs args) + { + Radius = int.Parse(args?.Value?.ToString() ?? "0"); + await OnSliderChanged.InvokeAsync(Radius); + } +} \ No newline at end of file diff --git a/src/Client/Components/ThemeManager/TableCustomizationPanel.razor b/src/Client/Components/ThemeManager/TableCustomizationPanel.razor new file mode 100644 index 0000000..e10ea10 --- /dev/null +++ b/src/Client/Components/ThemeManager/TableCustomizationPanel.razor @@ -0,0 +1,19 @@ + + +
+ Table Customization + T + +
+
+ + + + + + +
\ No newline at end of file diff --git a/src/Client/Components/ThemeManager/TableCustomizationPanel.razor.cs b/src/Client/Components/ThemeManager/TableCustomizationPanel.razor.cs new file mode 100644 index 0000000..6f00648 --- /dev/null +++ b/src/Client/Components/ThemeManager/TableCustomizationPanel.razor.cs @@ -0,0 +1,74 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Notifications; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Preferences; +using Microsoft.AspNetCore.Components; + +namespace RewardsPlus.BlazorWebAssembly.Client.Components.ThemeManager; + +public partial class TableCustomizationPanel +{ + [Parameter] + public bool IsDense { get; set; } + [Parameter] + public bool IsStriped { get; set; } + [Parameter] + public bool HasBorder { get; set; } + [Parameter] + public bool IsHoverable { get; set; } + [Inject] + protected INotificationPublisher Notifications { get; set; } = default!; + + private FshTablePreference _tablePreference = new(); + + protected override async Task OnInitializedAsync() + { + if (await ClientPreferences.GetPreference() is ClientPreference clientPreference) + { + _tablePreference = clientPreference.TablePreference; + } + + IsDense = _tablePreference.IsDense; + IsStriped = _tablePreference.IsStriped; + HasBorder = _tablePreference.HasBorder; + IsHoverable = _tablePreference.IsHoverable; + } + + [Parameter] + public EventCallback OnDenseSwitchToggled { get; set; } + + [Parameter] + public EventCallback OnStripedSwitchToggled { get; set; } + + [Parameter] + public EventCallback OnBorderdedSwitchToggled { get; set; } + + [Parameter] + public EventCallback OnHoverableSwitchToggled { get; set; } + + private async Task ToggleDenseSwitch() + { + _tablePreference.IsDense = !_tablePreference.IsDense; + await OnDenseSwitchToggled.InvokeAsync(_tablePreference.IsDense); + await Notifications.PublishAsync(_tablePreference); + } + + private async Task ToggleStripedSwitch() + { + _tablePreference.IsStriped = !_tablePreference.IsStriped; + await OnStripedSwitchToggled.InvokeAsync(_tablePreference.IsStriped); + await Notifications.PublishAsync(_tablePreference); + } + + private async Task ToggleBorderedSwitch() + { + _tablePreference.HasBorder = !_tablePreference.HasBorder; + await OnBorderdedSwitchToggled.InvokeAsync(_tablePreference.HasBorder); + await Notifications.PublishAsync(_tablePreference); + } + + private async Task ToggleHoverableSwitch() + { + _tablePreference.IsHoverable = !_tablePreference.IsHoverable; + await OnHoverableSwitchToggled.InvokeAsync(_tablePreference.IsHoverable); + await Notifications.PublishAsync(_tablePreference); + } +} \ No newline at end of file diff --git a/src/Client/Components/ThemeManager/ThemeButton.razor b/src/Client/Components/ThemeManager/ThemeButton.razor new file mode 100644 index 0000000..364ecc5 --- /dev/null +++ b/src/Client/Components/ThemeManager/ThemeButton.razor @@ -0,0 +1,16 @@ +
+ + + +
+ + \ No newline at end of file diff --git a/src/Client/Components/ThemeManager/ThemeButton.razor.cs b/src/Client/Components/ThemeManager/ThemeButton.razor.cs new file mode 100644 index 0000000..a88d4f2 --- /dev/null +++ b/src/Client/Components/ThemeManager/ThemeButton.razor.cs @@ -0,0 +1,10 @@ +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Web; + +namespace RewardsPlus.BlazorWebAssembly.Client.Components.ThemeManager; + +public partial class ThemeButton +{ + [Parameter] + public EventCallback OnClick { get; set; } +} \ No newline at end of file diff --git a/src/Client/Components/ThemeManager/ThemeDrawer.razor b/src/Client/Components/ThemeManager/ThemeDrawer.razor new file mode 100644 index 0000000..1ee685d --- /dev/null +++ b/src/Client/Components/ThemeManager/ThemeDrawer.razor @@ -0,0 +1,28 @@ + + + + Theme Manager + + + + + +
+ + + + + + + +
+
+ \ No newline at end of file diff --git a/src/Client/Components/ThemeManager/ThemeDrawer.razor.cs b/src/Client/Components/ThemeManager/ThemeDrawer.razor.cs new file mode 100644 index 0000000..afef574 --- /dev/null +++ b/src/Client/Components/ThemeManager/ThemeDrawer.razor.cs @@ -0,0 +1,96 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Preferences; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Theme; +using Microsoft.AspNetCore.Components; + +namespace RewardsPlus.BlazorWebAssembly.Client.Components.ThemeManager; + +public partial class ThemeDrawer +{ + [Parameter] + public bool ThemeDrawerOpen { get; set; } + + [Parameter] + public EventCallback ThemeDrawerOpenChanged { get; set; } + + [EditorRequired] + [Parameter] + public ClientPreference ThemePreference { get; set; } = default!; + + [EditorRequired] + [Parameter] + public EventCallback ThemePreferenceChanged { get; set; } + + private readonly List _colors = CustomColors.ThemeColors; + + private async Task UpdateThemePrimaryColor(string color) + { + if (ThemePreference is not null) + { + ThemePreference.PrimaryColor = color; + await ThemePreferenceChanged.InvokeAsync(ThemePreference); + } + } + + private async Task UpdateThemeSecondaryColor(string color) + { + if (ThemePreference is not null) + { + ThemePreference.SecondaryColor = color; + await ThemePreferenceChanged.InvokeAsync(ThemePreference); + } + } + + private async Task UpdateBorderRadius(double radius) + { + if (ThemePreference is not null) + { + ThemePreference.BorderRadius = radius; + await ThemePreferenceChanged.InvokeAsync(ThemePreference); + } + } + + private async Task ToggleDarkLightMode(bool isDarkMode) + { + if (ThemePreference is not null) + { + ThemePreference.IsDarkMode = isDarkMode; + await ThemePreferenceChanged.InvokeAsync(ThemePreference); + } + } + + private async Task ToggleEntityTableDense(bool isDense) + { + if (ThemePreference is not null) + { + ThemePreference.TablePreference.IsDense = isDense; + await ThemePreferenceChanged.InvokeAsync(ThemePreference); + } + } + + private async Task ToggleEntityTableStriped(bool isStriped) + { + if (ThemePreference is not null) + { + ThemePreference.TablePreference.IsStriped = isStriped; + await ThemePreferenceChanged.InvokeAsync(ThemePreference); + } + } + + private async Task ToggleEntityTableBorder(bool hasBorder) + { + if (ThemePreference is not null) + { + ThemePreference.TablePreference.HasBorder = hasBorder; + await ThemePreferenceChanged.InvokeAsync(ThemePreference); + } + } + + private async Task ToggleEntityTableHoverable(bool isHoverable) + { + if (ThemePreference is not null) + { + ThemePreference.TablePreference.IsHoverable = isHoverable; + await ThemePreferenceChanged.InvokeAsync(ThemePreference); + } + } +} \ No newline at end of file diff --git a/src/Client/Pages/Authentication/Authentication.razor b/src/Client/Pages/Authentication/Authentication.razor new file mode 100644 index 0000000..08b90bc --- /dev/null +++ b/src/Client/Pages/Authentication/Authentication.razor @@ -0,0 +1,74 @@ +@page "/authentication/{action}" +@attribute [AllowAnonymous] + +@inject IStringLocalizer L + + + @* Override the different child items to adapt them to our own style + I've done this for LogOutSucceeded now, already added the rest but with the defaults (and localization). *@ + + + + @L["You were successfully logged out."] + + + + + @L["Click here to log back in"]. + + + + + @L["Logging you in..."] + + + @L["Checking permissions..."] + + + + + @L["Sorry, your login failed. Please try again or contact support."] + + + @if (GetMessage() is string message && !string.IsNullOrWhiteSpace(message)) + { + + @message + + } + + + @L["Logging you out..."] + + + @L["Logging you out..."] + + + @L["Sorry, log out operation failed. Please try again or contact support."] + + + @L["Retrieving profile..."] + + + @L["Registering account..."] + + + +@code { + [Parameter] public string? Action { get; set; } + + private void GoHome() => Navigation.NavigateTo("/"); + + private string? GetMessage() + { + var query = Navigation.ToAbsoluteUri(Navigation.Uri).Query; + + if (!string.IsNullOrWhiteSpace(query) + && QueryHelpers.ParseQuery(query).TryGetValue("message", out var message)) + { + return message.ToString(); + } + + return null; + } +} \ No newline at end of file diff --git a/src/Client/Pages/Authentication/ForgotPassword.razor b/src/Client/Pages/Authentication/ForgotPassword.razor new file mode 100644 index 0000000..73d9b51 --- /dev/null +++ b/src/Client/Pages/Authentication/ForgotPassword.razor @@ -0,0 +1,45 @@ +@page "/account/forgot-password" +@attribute [AllowAnonymous] +@inject IStringLocalizer L +@inject IStringLocalizer LS + + + + + + + + +
+ +
+
+ @L["Forgot Password?"] + + @L["We can help you by resetting your password."] +
+
+
+
+ + + + + + + + + + + + + + + @L["Forgot Password"] + +
+
\ No newline at end of file diff --git a/src/Client/Pages/Authentication/ForgotPassword.razor.cs b/src/Client/Pages/Authentication/ForgotPassword.razor.cs new file mode 100644 index 0000000..a3eaaae --- /dev/null +++ b/src/Client/Pages/Authentication/ForgotPassword.razor.cs @@ -0,0 +1,31 @@ +using RewardsPlus.BlazorWebAssembly.Client.Components.Common; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using RewardsPlus.BlazorWebAssembly.Client.Shared; +using RewardsPlus.WebApi.Shared.Multitenancy; +using Microsoft.AspNetCore.Components; + +namespace RewardsPlus.BlazorWebAssembly.Client.Pages.Authentication; + +public partial class ForgotPassword +{ + private readonly ForgotPasswordRequest _forgotPasswordRequest = new(); + private CustomValidation? _customValidation; + private bool BusySubmitting { get; set; } + + [Inject] + private IUsersClient UsersClient { get; set; } = default!; + + private string Tenant { get; set; } = MultitenancyConstants.Root.Id; + + private async Task SubmitAsync() + { + BusySubmitting = true; + + await ApiHelper.ExecuteCallGuardedAsync( + () => UsersClient.ForgotPasswordAsync(Tenant, _forgotPasswordRequest), + Snackbar, + _customValidation); + + BusySubmitting = false; + } +} \ No newline at end of file diff --git a/src/Client/Pages/Authentication/Login.razor b/src/Client/Pages/Authentication/Login.razor new file mode 100644 index 0000000..2ca6929 --- /dev/null +++ b/src/Client/Pages/Authentication/Login.razor @@ -0,0 +1,47 @@ +@page "/login" +@attribute [AllowAnonymous] +@inject IStringLocalizer L +@inject IStringLocalizer LS + +
+ +
+
+ Sign In + @L["Enter your credentials to get started."] + +
+
+ + + + + + + + + + + + + + + + @L["Register?"] + + + @L["Forgot password?"] + + + @L["Sign In"] + + + @L["Fill Administrator Credentials"] + + + \ No newline at end of file diff --git a/src/Client/Pages/Authentication/Login.razor.cs b/src/Client/Pages/Authentication/Login.razor.cs new file mode 100644 index 0000000..2019629 --- /dev/null +++ b/src/Client/Pages/Authentication/Login.razor.cs @@ -0,0 +1,81 @@ +using RewardsPlus.BlazorWebAssembly.Client.Components.Common; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth; +using RewardsPlus.BlazorWebAssembly.Client.Shared; +using RewardsPlus.WebApi.Shared.Multitenancy; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Pages.Authentication; + +public partial class Login +{ + [CascadingParameter] + public Task AuthState { get; set; } = default!; + [Inject] + public IAuthenticationService AuthService { get; set; } = default!; + + private CustomValidation? _customValidation; + + public bool BusySubmitting { get; set; } + + private readonly TokenRequest _tokenRequest = new(); + private string TenantId { get; set; } = string.Empty; + private bool _passwordVisibility; + private InputType _passwordInput = InputType.Password; + private string _passwordInputIcon = Icons.Material.Filled.VisibilityOff; + + protected override async Task OnInitializedAsync() + { + if (AuthService.ProviderType == AuthProvider.AzureAd) + { + AuthService.NavigateToExternalLogin(Navigation.Uri); + return; + } + + var authState = await AuthState; + if (authState.User.Identity?.IsAuthenticated is true) + { + Navigation.NavigateTo("/"); + } + } + + private void TogglePasswordVisibility() + { + if (_passwordVisibility) + { + _passwordVisibility = false; + _passwordInputIcon = Icons.Material.Filled.VisibilityOff; + _passwordInput = InputType.Password; + } + else + { + _passwordVisibility = true; + _passwordInputIcon = Icons.Material.Filled.Visibility; + _passwordInput = InputType.Text; + } + } + + private void FillAdministratorCredentials() + { + _tokenRequest.Email = MultitenancyConstants.Root.EmailAddress; + _tokenRequest.Password = MultitenancyConstants.DefaultPassword; + TenantId = MultitenancyConstants.Root.Id; + } + + private async Task SubmitAsync() + { + BusySubmitting = true; + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => AuthService.LoginAsync(TenantId, _tokenRequest), + Snackbar, + _customValidation)) + { + Snackbar.Add($"Logged in as {_tokenRequest.Email}", Severity.Info); + } + + BusySubmitting = false; + } +} \ No newline at end of file diff --git a/src/Client/Pages/Authentication/SelfRegister.razor b/src/Client/Pages/Authentication/SelfRegister.razor new file mode 100644 index 0000000..975e15e --- /dev/null +++ b/src/Client/Pages/Authentication/SelfRegister.razor @@ -0,0 +1,74 @@ +@page "/users/self-register" +@attribute [AllowAnonymous] +@inject IStringLocalizer L +@inject IStringLocalizer LS + + + + + + + + +
+ +
+
+ + @L["New User Registration"] + + @L["Enter your details below to set up your new account"] +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @L["Register"] + + +
+
\ No newline at end of file diff --git a/src/Client/Pages/Authentication/SelfRegister.razor.cs b/src/Client/Pages/Authentication/SelfRegister.razor.cs new file mode 100644 index 0000000..965951c --- /dev/null +++ b/src/Client/Pages/Authentication/SelfRegister.razor.cs @@ -0,0 +1,58 @@ +using RewardsPlus.BlazorWebAssembly.Client.Components.Common; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using RewardsPlus.BlazorWebAssembly.Client.Shared; +using RewardsPlus.WebApi.Shared.Multitenancy; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Pages.Authentication; + +public partial class SelfRegister +{ + private readonly CreateUserRequest _createUserRequest = new(); + private CustomValidation? _customValidation; + private bool BusySubmitting { get; set; } + + [Inject] + private IUsersClient UsersClient { get; set; } = default!; + + private string Tenant { get; set; } = MultitenancyConstants.Root.Id; + + private bool _passwordVisibility; + private InputType _passwordInput = InputType.Password; + private string _passwordInputIcon = Icons.Material.Filled.VisibilityOff; + + private async Task SubmitAsync() + { + BusySubmitting = true; + + string? sucessMessage = await ApiHelper.ExecuteCallGuardedAsync( + () => UsersClient.SelfRegisterAsync(Tenant, _createUserRequest), + Snackbar, + _customValidation); + + if (sucessMessage != null) + { + Snackbar.Add(sucessMessage, Severity.Info); + Navigation.NavigateTo("/login"); + } + + BusySubmitting = false; + } + + private void TogglePasswordVisibility() + { + if (_passwordVisibility) + { + _passwordVisibility = false; + _passwordInputIcon = Icons.Material.Filled.VisibilityOff; + _passwordInput = InputType.Password; + } + else + { + _passwordVisibility = true; + _passwordInputIcon = Icons.Material.Filled.Visibility; + _passwordInput = InputType.Text; + } + } +} \ No newline at end of file diff --git a/src/Client/Pages/Catalog/BrandAutocomplete.cs b/src/Client/Pages/Catalog/BrandAutocomplete.cs new file mode 100644 index 0000000..e2e3ec0 --- /dev/null +++ b/src/Client/Pages/Catalog/BrandAutocomplete.cs @@ -0,0 +1,68 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using RewardsPlus.BlazorWebAssembly.Client.Shared; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Pages.Catalog; + +public class BrandAutocomplete : MudAutocomplete +{ + [Inject] + private IStringLocalizer L { get; set; } = default!; + [Inject] + private IBrandsClient BrandsClient { get; set; } = default!; + [Inject] + private ISnackbar Snackbar { get; set; } = default!; + + private List _brands = new(); + + // supply default parameters, but leave the possibility to override them + public override Task SetParametersAsync(ParameterView parameters) + { + Label = L["Brand"]; + Variant = Variant.Filled; + Dense = true; + Margin = Margin.Dense; + ResetValueOnEmptyText = true; + SearchFunc = SearchBrands; + ToStringFunc = GetBrandName; + Clearable = true; + return base.SetParametersAsync(parameters); + } + + // when the value parameter is set, we have to load that one brand to be able to show the name + // we can't do that in OnInitialized because of a strange bug (https://github.com/MudBlazor/MudBlazor/issues/3818) + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender && + _value != default && + await ApiHelper.ExecuteCallGuardedAsync( + () => BrandsClient.GetAsync(_value), Snackbar) is { } brand) + { + _brands.Add(brand); + ForceRender(true); + } + } + + private async Task> SearchBrands(string value) + { + var filter = new SearchBrandsRequest + { + PageSize = 10, + AdvancedSearch = new() { Fields = new[] { "name" }, Keyword = value } + }; + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => BrandsClient.SearchAsync(filter), Snackbar) + is PaginationResponseOfBrandDto response) + { + _brands = response.Data.ToList(); + } + + return _brands.Select(x => x.Id); + } + + private string GetBrandName(Guid id) => + _brands.Find(b => b.Id == id)?.Name ?? string.Empty; +} \ No newline at end of file diff --git a/src/Client/Pages/Catalog/Brands.razor b/src/Client/Pages/Catalog/Brands.razor new file mode 100644 index 0000000..fe23833 --- /dev/null +++ b/src/Client/Pages/Catalog/Brands.razor @@ -0,0 +1,52 @@ +@page "/catalog/brands" +@attribute [MustHavePermission(FSHAction.View, FSHResource.Brands)] + +@inject IStringLocalizer L +@inject IBrandsClient BrandsClient + + + + + + + @if (!Context.AddEditModal.IsCreate) + { + + + + } + + + + + + + + + + +@code +{ + protected EntityServerTableContext Context { get; set; } = default!; + + protected override void OnInitialized() => + Context = new( + entityName: L["Brand"], + entityNamePlural: L["Brands"], + entityResource: FSHResource.Brands, + fields: new() + { + new(brand => brand.Id, L["Id"], "Id"), + new(brand => brand.Name, L["Name"], "Name"), + new(brand => brand.Description, L["Description"], "Description"), + }, + idFunc: brand => brand.Id, + searchFunc: async filter => (await BrandsClient + .SearchAsync(filter.Adapt())) + .Adapt>(), + createFunc: async brand => await BrandsClient.CreateAsync(brand.Adapt()), + updateFunc: async (id, brand) => await BrandsClient.UpdateAsync(id, brand), + deleteFunc: async id => await BrandsClient.DeleteAsync(id), + exportAction: string.Empty); +} \ No newline at end of file diff --git a/src/Client/Pages/Catalog/Products.razor b/src/Client/Pages/Catalog/Products.razor new file mode 100644 index 0000000..89b083e --- /dev/null +++ b/src/Client/Pages/Catalog/Products.razor @@ -0,0 +1,78 @@ +@page "/catalog/products" +@attribute [MustHavePermission(FSHAction.View, FSHResource.Products)] + +@inject IStringLocalizer L + + + + + + + + @L["Minimum Rate"]: @_searchMinimumRate.ToString() + @L["Maximum Rate"]: @_searchMaximumRate.ToString() + + + + @if (!Context.AddEditModal.IsCreate) + { + + + + } + + + + + + + + + + + + + + + @if(!string.IsNullOrEmpty(context.ImageInBytes)) + { + + } + else + { + + } + + +
+ + @L["Upload"] + + @if(!Context.AddEditModal.IsCreate && !string.IsNullOrEmpty(context.ImagePath) && string.IsNullOrEmpty(context.ImageInBytes)) + { + + @L["View"] + + + + @L["Delete"] + + } + @if(!string.IsNullOrEmpty(context.ImageInBytes)) + { + + @L["Clear"] + + } +
+
+
+
+ +
\ No newline at end of file diff --git a/src/Client/Pages/Catalog/Products.razor.cs b/src/Client/Pages/Catalog/Products.razor.cs new file mode 100644 index 0000000..2995de4 --- /dev/null +++ b/src/Client/Pages/Catalog/Products.razor.cs @@ -0,0 +1,159 @@ +using RewardsPlus.BlazorWebAssembly.Client.Components.EntityTable; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Common; +using RewardsPlus.WebApi.Shared.Authorization; +using Mapster; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Forms; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Pages.Catalog; + +public partial class Products +{ + [Inject] + protected IProductsClient ProductsClient { get; set; } = default!; + [Inject] + protected IBrandsClient BrandsClient { get; set; } = default!; + + protected EntityServerTableContext Context { get; set; } = default!; + + private EntityTable _table = default!; + + protected override void OnInitialized() => + Context = new( + entityName: L["Product"], + entityNamePlural: L["Products"], + entityResource: FSHResource.Products, + fields: new() + { + new(prod => prod.Id, L["Id"], "Id"), + new(prod => prod.Name, L["Name"], "Name"), + new(prod => prod.BrandName, L["Brand"], "Brand.Name"), + new(prod => prod.Description, L["Description"], "Description"), + new(prod => prod.Rate, L["Rate"], "Rate") + }, + enableAdvancedSearch: true, + idFunc: prod => prod.Id, + searchFunc: async filter => + { + var productFilter = filter.Adapt(); + + productFilter.BrandId = SearchBrandId == default ? null : SearchBrandId; + productFilter.MinimumRate = SearchMinimumRate; + productFilter.MaximumRate = SearchMaximumRate; + + var result = await ProductsClient.SearchAsync(productFilter); + return result.Adapt>(); + }, + createFunc: async prod => + { + if (!string.IsNullOrEmpty(prod.ImageInBytes)) + { + prod.Image = new FileUploadRequest() { Data = prod.ImageInBytes, Extension = prod.ImageExtension ?? string.Empty, Name = $"{prod.Name}_{Guid.NewGuid():N}" }; + } + + await ProductsClient.CreateAsync(prod.Adapt()); + prod.ImageInBytes = string.Empty; + }, + updateFunc: async (id, prod) => + { + if (!string.IsNullOrEmpty(prod.ImageInBytes)) + { + prod.DeleteCurrentImage = true; + prod.Image = new FileUploadRequest() { Data = prod.ImageInBytes, Extension = prod.ImageExtension ?? string.Empty, Name = $"{prod.Name}_{Guid.NewGuid():N}" }; + } + + await ProductsClient.UpdateAsync(id, prod.Adapt()); + prod.ImageInBytes = string.Empty; + }, + exportFunc: async filter => + { + var exportFilter = filter.Adapt(); + + exportFilter.BrandId = SearchBrandId == default ? null : SearchBrandId; + exportFilter.MinimumRate = SearchMinimumRate; + exportFilter.MaximumRate = SearchMaximumRate; + + return await ProductsClient.ExportAsync(exportFilter); + }, + deleteFunc: async id => await ProductsClient.DeleteAsync(id)); + + // Advanced Search + + private Guid _searchBrandId; + private Guid SearchBrandId + { + get => _searchBrandId; + set + { + _searchBrandId = value; + _ = _table.ReloadDataAsync(); + } + } + + private decimal _searchMinimumRate; + private decimal SearchMinimumRate + { + get => _searchMinimumRate; + set + { + _searchMinimumRate = value; + _ = _table.ReloadDataAsync(); + } + } + + private decimal _searchMaximumRate = 9999; + private decimal SearchMaximumRate + { + get => _searchMaximumRate; + set + { + _searchMaximumRate = value; + _ = _table.ReloadDataAsync(); + } + } + + // TODO : Make this as a shared service or something? Since it's used by Profile Component also for now, and literally any other component that will have image upload. + // The new service should ideally return $"data:{ApplicationConstants.StandardImageFormat};base64,{Convert.ToBase64String(buffer)}" + private async Task UploadFiles(InputFileChangeEventArgs e) + { + if (e.File != null) + { + string? extension = Path.GetExtension(e.File.Name); + if (!ApplicationConstants.SupportedImageFormats.Contains(extension.ToLower())) + { + Snackbar.Add("Image Format Not Supported.", Severity.Error); + return; + } + + Context.AddEditModal.RequestModel.ImageExtension = extension; + var imageFile = await e.File.RequestImageFileAsync(ApplicationConstants.StandardImageFormat, ApplicationConstants.MaxImageWidth, ApplicationConstants.MaxImageHeight); + byte[]? buffer = new byte[imageFile.Size]; + await imageFile.OpenReadStream(ApplicationConstants.MaxAllowedSize).ReadAsync(buffer); + Context.AddEditModal.RequestModel.ImageInBytes = $"data:{ApplicationConstants.StandardImageFormat};base64,{Convert.ToBase64String(buffer)}"; + Context.AddEditModal.ForceRender(); + } + } + + public void ClearImageInBytes() + { + Context.AddEditModal.RequestModel.ImageInBytes = string.Empty; + Context.AddEditModal.ForceRender(); + } + + public void SetDeleteCurrentImageFlag() + { + Context.AddEditModal.RequestModel.ImageInBytes = string.Empty; + Context.AddEditModal.RequestModel.ImagePath = string.Empty; + Context.AddEditModal.RequestModel.DeleteCurrentImage = true; + Context.AddEditModal.ForceRender(); + } +} + +public class ProductViewModel : UpdateProductRequest +{ + public string? ImagePath { get; set; } + public string? ImageInBytes { get; set; } + public string? ImageExtension { get; set; } +} \ No newline at end of file diff --git a/src/Client/Pages/Identity/Account/Account.razor b/src/Client/Pages/Identity/Account/Account.razor new file mode 100644 index 0000000..4d89ede --- /dev/null +++ b/src/Client/Pages/Identity/Account/Account.razor @@ -0,0 +1,33 @@ +@page "/account" + +@inject IStringLocalizer L + + + + + + + + @if (!SecurityTabHidden) + { + + + + } + + +@code +{ + [Inject] + public IAuthenticationService AuthService { get; set; } = default!; + + public bool SecurityTabHidden { get; set; } = false; + + protected override void OnInitialized() + { + if (AuthService.ProviderType == AuthProvider.AzureAd) + { + SecurityTabHidden = true; + } + } +} \ No newline at end of file diff --git a/src/Client/Pages/Identity/Account/Profile.razor b/src/Client/Pages/Identity/Account/Profile.razor new file mode 100644 index 0000000..006b27b --- /dev/null +++ b/src/Client/Pages/Identity/Account/Profile.razor @@ -0,0 +1,84 @@ +@inject IStringLocalizer L + + + + + +
+ @if (!string.IsNullOrEmpty(_imageUrl)) + { + + } + else + { + @_firstLetterOfName + } +
+ @_profileModel.FirstName @_profileModel.LastName + @_profileModel.Email +
+ + +
+
+ + + + + + @L["Profile Details"] + + + + + + + + + + + + + + + + + + + + + + @L["Save Changes"] + + + + +
\ No newline at end of file diff --git a/src/Client/Pages/Identity/Account/Profile.razor.cs b/src/Client/Pages/Identity/Account/Profile.razor.cs new file mode 100644 index 0000000..2130489 --- /dev/null +++ b/src/Client/Pages/Identity/Account/Profile.razor.cs @@ -0,0 +1,101 @@ +using System.Security.Claims; +using RewardsPlus.BlazorWebAssembly.Client.Components.Common; +using RewardsPlus.BlazorWebAssembly.Client.Components.Dialogs; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Common; +using RewardsPlus.BlazorWebAssembly.Client.Shared; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; +using Microsoft.AspNetCore.Components.Forms; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Pages.Identity.Account; + +public partial class Profile +{ + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + [Inject] + protected IAuthenticationService AuthService { get; set; } = default!; + [Inject] + protected IPersonalClient PersonalClient { get; set; } = default!; + + private readonly UpdateUserRequest _profileModel = new(); + + private string? _imageUrl; + private string? _userId; + private char _firstLetterOfName; + + private CustomValidation? _customValidation; + + protected override async Task OnInitializedAsync() + { + if ((await AuthState).User is { } user) + { + _userId = user.GetUserId(); + _profileModel.Email = user.GetEmail() ?? string.Empty; + _profileModel.FirstName = user.GetFirstName() ?? string.Empty; + _profileModel.LastName = user.GetSurname() ?? string.Empty; + _profileModel.PhoneNumber = user.GetPhoneNumber(); + _imageUrl = string.IsNullOrEmpty(user?.GetImageUrl()) ? string.Empty : (Config[ConfigNames.ApiBaseUrl] + user?.GetImageUrl()); + if (_userId is not null) _profileModel.Id = _userId; + } + + if (_profileModel.FirstName?.Length > 0) + { + _firstLetterOfName = _profileModel.FirstName.ToUpper().FirstOrDefault(); + } + } + + private async Task UpdateProfileAsync() + { + if (await ApiHelper.ExecuteCallGuardedAsync( + () => PersonalClient.UpdateProfileAsync(_profileModel), Snackbar, _customValidation)) + { + Snackbar.Add(L["Your Profile has been updated. Please Login again to Continue."], Severity.Success); + await AuthService.ReLoginAsync(Navigation.Uri); + } + } + + private async Task UploadFiles(InputFileChangeEventArgs e) + { + var file = e.File; + if (file is not null) + { + string? extension = Path.GetExtension(file.Name); + if (!ApplicationConstants.SupportedImageFormats.Contains(extension.ToLower())) + { + Snackbar.Add("Image Format Not Supported.", Severity.Error); + return; + } + + string? fileName = $"{_userId}-{Guid.NewGuid():N}"; + fileName = fileName[..Math.Min(fileName.Length, 90)]; + var imageFile = await file.RequestImageFileAsync(ApplicationConstants.StandardImageFormat, ApplicationConstants.MaxImageWidth, ApplicationConstants.MaxImageHeight); + byte[]? buffer = new byte[imageFile.Size]; + await imageFile.OpenReadStream(ApplicationConstants.MaxAllowedSize).ReadAsync(buffer); + string? base64String = $"data:{ApplicationConstants.StandardImageFormat};base64,{Convert.ToBase64String(buffer)}"; + _profileModel.Image = new FileUploadRequest() { Name = fileName, Data = base64String, Extension = extension }; + + await UpdateProfileAsync(); + } + } + + public async Task RemoveImageAsync() + { + string deleteContent = L["You're sure you want to delete your Profile Image?"]; + var parameters = new DialogParameters + { + { nameof(DeleteConfirmation.ContentText), deleteContent } + }; + var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true, DisableBackdropClick = true }; + var dialog = DialogService.Show(L["Delete"], parameters, options); + var result = await dialog.Result; + if (!result.Cancelled) + { + _profileModel.DeleteCurrentImage = true; + await UpdateProfileAsync(); + } + } +} \ No newline at end of file diff --git a/src/Client/Pages/Identity/Account/Security.razor b/src/Client/Pages/Identity/Account/Security.razor new file mode 100644 index 0000000..c63d189 --- /dev/null +++ b/src/Client/Pages/Identity/Account/Security.razor @@ -0,0 +1,41 @@ +@inject IStringLocalizer L + + + + + + @L["Change Password"] + + + + + + + + + + + + + + + + + + + + @L["Change Password"] + + + \ No newline at end of file diff --git a/src/Client/Pages/Identity/Account/Security.razor.cs b/src/Client/Pages/Identity/Account/Security.razor.cs new file mode 100644 index 0000000..5b32337 --- /dev/null +++ b/src/Client/Pages/Identity/Account/Security.razor.cs @@ -0,0 +1,72 @@ +using RewardsPlus.BlazorWebAssembly.Client.Components.Common; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using RewardsPlus.BlazorWebAssembly.Client.Shared; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Pages.Identity.Account; + +public partial class Security +{ + [Inject] + public IPersonalClient PersonalClient { get; set; } = default!; + + private readonly ChangePasswordRequest _passwordModel = new(); + + private CustomValidation? _customValidation; + + private async Task ChangePasswordAsync() + { + if (await ApiHelper.ExecuteCallGuardedAsync( + () => PersonalClient.ChangePasswordAsync(_passwordModel), + Snackbar, + _customValidation, + L["Password Changed!"])) + { + _passwordModel.Password = string.Empty; + _passwordModel.NewPassword = string.Empty; + _passwordModel.ConfirmNewPassword = string.Empty; + } + } + + private bool _currentPasswordVisibility; + private InputType _currentPasswordInput = InputType.Password; + private string _currentPasswordInputIcon = Icons.Material.Filled.VisibilityOff; + private bool _newPasswordVisibility; + private InputType _newPasswordInput = InputType.Password; + private string _newPasswordInputIcon = Icons.Material.Filled.VisibilityOff; + + private void TogglePasswordVisibility(bool newPassword) + { + if (newPassword) + { + if (_newPasswordVisibility) + { + _newPasswordVisibility = false; + _newPasswordInputIcon = Icons.Material.Filled.VisibilityOff; + _newPasswordInput = InputType.Password; + } + else + { + _newPasswordVisibility = true; + _newPasswordInputIcon = Icons.Material.Filled.Visibility; + _newPasswordInput = InputType.Text; + } + } + else + { + if (_currentPasswordVisibility) + { + _currentPasswordVisibility = false; + _currentPasswordInputIcon = Icons.Material.Filled.VisibilityOff; + _currentPasswordInput = InputType.Password; + } + else + { + _currentPasswordVisibility = true; + _currentPasswordInputIcon = Icons.Material.Filled.Visibility; + _currentPasswordInput = InputType.Text; + } + } + } +} \ No newline at end of file diff --git a/src/Client/Pages/Identity/Roles/RolePermissions.razor b/src/Client/Pages/Identity/Roles/RolePermissions.razor new file mode 100644 index 0000000..c51c397 --- /dev/null +++ b/src/Client/Pages/Identity/Roles/RolePermissions.razor @@ -0,0 +1,75 @@ +@page "/roles/{Id}/permissions" +@attribute [MustHavePermission(FSHAction.View, FSHResource.RoleClaims)] + +@inject IStringLocalizer L + + + +@if (!_loaded) +{ + +} +else +{ + + @foreach (var group in _groupedRoleClaims.Keys) + { + var selectedRoleClaimsInGroup = _groupedRoleClaims[group].Where(c => c.Enabled).ToList(); + var allRoleClaimsInGroup = _groupedRoleClaims[group].ToList(); + + + +
+ @L["Back"] + + @if (_canEditRoleClaims) + { + @L["Update Permissions"] + + } +
+ + @if (_canSearchRoleClaims) + { + + + } +
+ + + + @L["Permission Name"] + + + + @L["Description"] + + + @L["Status"] + + + + + + + + + + + + + + + + + + +
+
+ } +
+} \ No newline at end of file diff --git a/src/Client/Pages/Identity/Roles/RolePermissions.razor.cs b/src/Client/Pages/Identity/Roles/RolePermissions.razor.cs new file mode 100644 index 0000000..859124a --- /dev/null +++ b/src/Client/Pages/Identity/Roles/RolePermissions.razor.cs @@ -0,0 +1,114 @@ +using System.Security.Claims; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth; +using RewardsPlus.BlazorWebAssembly.Client.Shared; +using RewardsPlus.WebApi.Shared.Authorization; +using RewardsPlus.WebApi.Shared.Multitenancy; +using Mapster; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Pages.Identity.Roles; + +public partial class RolePermissions +{ + [Parameter] + public string Id { get; set; } = default!; // from route + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + [Inject] + protected IAuthorizationService AuthService { get; set; } = default!; + [Inject] + protected IRolesClient RolesClient { get; set; } = default!; + + private Dictionary> _groupedRoleClaims = default!; + + public string _title = string.Empty; + public string _description = string.Empty; + + private string _searchString = string.Empty; + + private bool _canEditRoleClaims; + private bool _canSearchRoleClaims; + private bool _loaded; + + static RolePermissions() => TypeAdapterConfig.NewConfig().MapToConstructor(true); + + protected override async Task OnInitializedAsync() + { + var state = await AuthState; + _canEditRoleClaims = await AuthService.HasPermissionAsync(state.User, FSHAction.Update, FSHResource.RoleClaims); + _canSearchRoleClaims = await AuthService.HasPermissionAsync(state.User, FSHAction.View, FSHResource.RoleClaims); + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => RolesClient.GetByIdWithPermissionsAsync(Id), Snackbar) + is RoleDto role && role.Permissions is not null) + { + _title = string.Format(L["{0} Permissions"], role.Name); + _description = string.Format(L["Manage {0} Role Permissions"], role.Name); + + var permissions = state.User.GetTenant() == MultitenancyConstants.Root.Id + ? FSHPermissions.All + : FSHPermissions.Admin; + + _groupedRoleClaims = permissions + .GroupBy(p => p.Resource) + .ToDictionary(g => g.Key, g => g.Select(p => + { + var permission = p.Adapt(); + permission.Enabled = role.Permissions.Contains(permission.Name); + return permission; + }).ToList()); + } + + _loaded = true; + } + + private Color GetGroupBadgeColor(int selected, int all) + { + if (selected == 0) + return Color.Error; + + if (selected == all) + return Color.Success; + + return Color.Info; + } + + private async Task SaveAsync() + { + var allPermissions = _groupedRoleClaims.Values.SelectMany(a => a); + var selectedPermissions = allPermissions.Where(a => a.Enabled); + var request = new UpdateRolePermissionsRequest() + { + RoleId = Id, + Permissions = selectedPermissions.Where(x => x.Enabled).Select(x => x.Name).ToList(), + }; + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => RolesClient.UpdatePermissionsAsync(request.RoleId, request), + Snackbar, + successMessage: L["Updated Permissions."]) + is not null) + { + Navigation.NavigateTo("/roles"); + } + } + + private bool Search(PermissionViewModel permission) => + string.IsNullOrWhiteSpace(_searchString) + || permission.Name.Contains(_searchString, StringComparison.OrdinalIgnoreCase) is true + || permission.Description.Contains(_searchString, StringComparison.OrdinalIgnoreCase) is true; +} + +public record PermissionViewModel : FSHPermission +{ + public bool Enabled { get; set; } + + public PermissionViewModel(string Description, string Action, string Resource, bool IsBasic = false, bool IsRoot = false) + : base(Description, Action, Resource, IsBasic, IsRoot) + { + } +} \ No newline at end of file diff --git a/src/Client/Pages/Identity/Roles/Roles.razor b/src/Client/Pages/Identity/Roles/Roles.razor new file mode 100644 index 0000000..c24582a --- /dev/null +++ b/src/Client/Pages/Identity/Roles/Roles.razor @@ -0,0 +1,33 @@ +@page "/roles" +@attribute [MustHavePermission(FSHAction.View, FSHResource.Roles)] + +@inject IStringLocalizer L + + + + + + + @if (_canViewRoleClaims) + { + @L["Manage Permission"] + } + + + + @if (!Context.AddEditModal.IsCreate) + { + + + + } + + + + + + + + + \ No newline at end of file diff --git a/src/Client/Pages/Identity/Roles/Roles.razor.cs b/src/Client/Pages/Identity/Roles/Roles.razor.cs new file mode 100644 index 0000000..42a08a4 --- /dev/null +++ b/src/Client/Pages/Identity/Roles/Roles.razor.cs @@ -0,0 +1,60 @@ +using RewardsPlus.BlazorWebAssembly.Client.Components.EntityTable; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth; +using RewardsPlus.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; + +namespace RewardsPlus.BlazorWebAssembly.Client.Pages.Identity.Roles; + +public partial class Roles +{ + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + [Inject] + protected IAuthorizationService AuthService { get; set; } = default!; + [Inject] + private IRolesClient RolesClient { get; set; } = default!; + + protected EntityClientTableContext Context { get; set; } = default!; + + private bool _canViewRoleClaims; + + protected override async Task OnInitializedAsync() + { + var state = await AuthState; + _canViewRoleClaims = await AuthService.HasPermissionAsync(state.User, FSHAction.View, FSHResource.RoleClaims); + + Context = new( + entityName: L["Role"], + entityNamePlural: L["Roles"], + entityResource: FSHResource.Roles, + searchAction: FSHAction.View, + fields: new() + { + new(role => role.Id, L["Id"]), + new(role => role.Name, L["Name"]), + new(role => role.Description, L["Description"]) + }, + idFunc: role => role.Id, + loadDataFunc: async () => (await RolesClient.GetListAsync()).ToList(), + searchFunc: (searchString, role) => + string.IsNullOrWhiteSpace(searchString) + || role.Name?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true + || role.Description?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true, + createFunc: async role => await RolesClient.RegisterRoleAsync(role), + updateFunc: async (_, role) => await RolesClient.RegisterRoleAsync(role), + deleteFunc: async id => await RolesClient.DeleteAsync(id), + hasExtraActionsFunc: () => _canViewRoleClaims, + canUpdateEntityFunc: e => !FSHRoles.IsDefault(e.Name), + canDeleteEntityFunc: e => !FSHRoles.IsDefault(e.Name), + exportAction: string.Empty); + } + + private void ManagePermissions(string? roleId) + { + ArgumentNullException.ThrowIfNull(roleId, nameof(roleId)); + Navigation.NavigateTo($"/roles/{roleId}/permissions"); + } +} \ No newline at end of file diff --git a/src/Client/Pages/Identity/Users/UserProfile.razor b/src/Client/Pages/Identity/Users/UserProfile.razor new file mode 100644 index 0000000..5eeaddf --- /dev/null +++ b/src/Client/Pages/Identity/Users/UserProfile.razor @@ -0,0 +1,148 @@ +@page "/users/{Id}/profile" +@attribute [MustHavePermission(FSHAction.View, FSHResource.Users)] + +@inject IStringLocalizer _localizer + + +@if (!_loaded) +{ + +} +else +{ + + + @if (_canToggleUserStatus) + { + + + + + @_localizer["Administrator Settings."] + @_localizer["This is an Administrator Only View."] + + + + + + + + @_localizer["Save Changes"] + + + + + + } + + + + +
+ @if (!string.IsNullOrEmpty(_imageUrl)) + { + + } + else + { + @_firstLetterOfName + + } +
+ @_firstName @_lastName + @_email +
+ +
+ @if (!string.IsNullOrEmpty(_imageUrl)) + { + + @_localizer["View"] + + } +
+ +
+
+
+ + + + + @_localizer["Public Profile"] + + + + + + @_firstName + + + @_lastName + + + @_phoneNumber + + + + @_email + + + + + +
+} + +@code +{ +public class CustomStringToBoolConverter : BoolConverter + { + + public CustomStringToBoolConverter() + { + SetFunc = OnSet; + GetFunc = OnGet; + } + private string TrueString = "User Active"; + private string FalseString = "no, at all"; + private string NullString = "I don't know"; + + private string OnGet(bool? value) + { + try + { + return (value == true) ? TrueString : FalseString; + } + catch (Exception e) + { + UpdateGetError("Conversion error: " + e.Message); + return NullString; + } + } + + private bool? OnSet(string arg) + { + if (arg == null) + return null; + try + { + if (arg == TrueString) + return true; + if (arg == FalseString) + return false; + else + return null; + } + catch (FormatException e) + { + UpdateSetError("Conversion error: " + e.Message); + return null; + } + } + + } +} \ No newline at end of file diff --git a/src/Client/Pages/Identity/Users/UserProfile.razor.cs b/src/Client/Pages/Identity/Users/UserProfile.razor.cs new file mode 100644 index 0000000..8e3d0d8 --- /dev/null +++ b/src/Client/Pages/Identity/Users/UserProfile.razor.cs @@ -0,0 +1,74 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Common; +using RewardsPlus.BlazorWebAssembly.Client.Shared; +using RewardsPlus.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; + +namespace RewardsPlus.BlazorWebAssembly.Client.Pages.Identity.Users; + +public partial class UserProfile +{ + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + [Inject] + protected IAuthorizationService AuthService { get; set; } = default!; + [Inject] + protected IUsersClient UsersClient { get; set; } = default!; + + [Parameter] + public string? Id { get; set; } + [Parameter] + public string? Title { get; set; } + [Parameter] + public string? Description { get; set; } + + private bool _active; + private bool _emailConfirmed; + private char _firstLetterOfName; + private string? _firstName; + private string? _lastName; + private string? _phoneNumber; + private string? _email; + private string? _imageUrl; + private bool _loaded; + private bool _canToggleUserStatus; + + private async Task ToggleUserStatus() + { + var request = new ToggleUserStatusRequest { ActivateUser = _active, UserId = Id }; + await ApiHelper.ExecuteCallGuardedAsync(() => UsersClient.ToggleStatusAsync(Id, request), Snackbar); + Navigation.NavigateTo("/users"); + } + + [Parameter] + public string? ImageUrl { get; set; } + + protected override async Task OnInitializedAsync() + { + if (await ApiHelper.ExecuteCallGuardedAsync( + () => UsersClient.GetByIdAsync(Id), Snackbar) + is UserDetailsDto user) + { + _firstName = user.FirstName; + _lastName = user.LastName; + _email = user.Email; + _phoneNumber = user.PhoneNumber; + _active = user.IsActive; + _emailConfirmed = user.EmailConfirmed; + _imageUrl = string.IsNullOrEmpty(user.ImageUrl) ? string.Empty : (Config[ConfigNames.ApiBaseUrl] + user.ImageUrl); + Title = $"{_firstName} {_lastName}'s {_localizer["Profile"]}"; + Description = _email; + if (_firstName?.Length > 0) + { + _firstLetterOfName = _firstName.ToUpper().FirstOrDefault(); + } + } + + var state = await AuthState; + _canToggleUserStatus = await AuthService.HasPermissionAsync(state.User, FSHAction.Update, FSHResource.Users); + _loaded = true; + } +} \ No newline at end of file diff --git a/src/Client/Pages/Identity/Users/UserRoles.razor b/src/Client/Pages/Identity/Users/UserRoles.razor new file mode 100644 index 0000000..bc82479 --- /dev/null +++ b/src/Client/Pages/Identity/Users/UserRoles.razor @@ -0,0 +1,67 @@ +@page "/users/{Id}/roles" +@attribute [MustHavePermission(FSHAction.View, FSHResource.UserRoles)] + +@inject IStringLocalizer L + + + +@if (!_loaded) +{ + +} +else +{ + + +
+ + @L["Back"] + + @if (_canEditUsers) + { + + @L["Update"] + + } +
+ + @if (_canSearchRoles) + { + + + } +
+ + + @L["Role Name"] + + + + @L["Description"] + + + + @L["Status"] + + + + + + + + + + + + + + + + + + +
+} \ No newline at end of file diff --git a/src/Client/Pages/Identity/Users/UserRoles.razor.cs b/src/Client/Pages/Identity/Users/UserRoles.razor.cs new file mode 100644 index 0000000..399b6e7 --- /dev/null +++ b/src/Client/Pages/Identity/Users/UserRoles.razor.cs @@ -0,0 +1,77 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth; +using RewardsPlus.BlazorWebAssembly.Client.Shared; +using RewardsPlus.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; + +namespace RewardsPlus.BlazorWebAssembly.Client.Pages.Identity.Users; + +public partial class UserRoles +{ + [Parameter] + public string? Id { get; set; } + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + [Inject] + protected IAuthorizationService AuthService { get; set; } = default!; + [Inject] + protected IUsersClient UsersClient { get; set; } = default!; + + private List _userRolesList = default!; + + private string _title = string.Empty; + private string _description = string.Empty; + + private string _searchString = string.Empty; + + private bool _canEditUsers; + private bool _canSearchRoles; + private bool _loaded; + + protected override async Task OnInitializedAsync() + { + var state = await AuthState; + _canEditUsers = await AuthService.HasPermissionAsync(state.User, FSHAction.Update, FSHResource.Users); + _canSearchRoles = await AuthService.HasPermissionAsync(state.User, FSHAction.View, FSHResource.UserRoles); + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => UsersClient.GetByIdAsync(Id), Snackbar) + is UserDetailsDto user) + { + _title = $"{user.FirstName} {user.LastName}"; + _description = string.Format(L["Manage {0} {1}'s Roles"], user.FirstName, user.LastName); + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => UsersClient.GetRolesAsync(user.Id.ToString()), Snackbar) + is ICollection response) + { + _userRolesList = response.ToList(); + } + } + + _loaded = true; + } + + private async Task SaveAsync() + { + var request = new UserRolesRequest() + { + UserRoles = _userRolesList + }; + + if (await ApiHelper.ExecuteCallGuardedAsync( + () => UsersClient.AssignRolesAsync(Id, request), + Snackbar, + successMessage: L["Updated User Roles."]) + is not null) + { + Navigation.NavigateTo("/users"); + } + } + + private bool Search(UserRoleDto userRole) => + string.IsNullOrWhiteSpace(_searchString) + || userRole.RoleName?.Contains(_searchString, StringComparison.OrdinalIgnoreCase) is true; +} \ No newline at end of file diff --git a/src/Client/Pages/Identity/Users/Users.razor b/src/Client/Pages/Identity/Users/Users.razor new file mode 100644 index 0000000..f2d93ec --- /dev/null +++ b/src/Client/Pages/Identity/Users/Users.razor @@ -0,0 +1,46 @@ +@page "/users" +@attribute [MustHavePermission(FSHAction.View, FSHResource.Users)] + +@inject IStringLocalizer L + + + + + + @L["View Profile"] + @if (_canViewRoles) + { + @L["Manage Roles"] + } + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Client/Pages/Identity/Users/Users.razor.cs b/src/Client/Pages/Identity/Users/Users.razor.cs new file mode 100644 index 0000000..609412a --- /dev/null +++ b/src/Client/Pages/Identity/Users/Users.razor.cs @@ -0,0 +1,95 @@ +using RewardsPlus.BlazorWebAssembly.Client.Components.EntityTable; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth; +using RewardsPlus.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Pages.Identity.Users; + +public partial class Users +{ + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + [Inject] + protected IAuthorizationService AuthService { get; set; } = default!; + + [Inject] + protected IUsersClient UsersClient { get; set; } = default!; + + protected EntityClientTableContext Context { get; set; } = default!; + + private bool _canExportUsers; + private bool _canViewRoles; + + // Fields for editform + protected string Password { get; set; } = string.Empty; + protected string ConfirmPassword { get; set; } = string.Empty; + + private bool _passwordVisibility; + private InputType _passwordInput = InputType.Password; + private string _passwordInputIcon = Icons.Material.Filled.VisibilityOff; + + protected override async Task OnInitializedAsync() + { + var user = (await AuthState).User; + _canExportUsers = await AuthService.HasPermissionAsync(user, FSHAction.Export, FSHResource.Users); + _canViewRoles = await AuthService.HasPermissionAsync(user, FSHAction.View, FSHResource.UserRoles); + + Context = new( + entityName: L["User"], + entityNamePlural: L["Users"], + entityResource: FSHResource.Users, + searchAction: FSHAction.View, + updateAction: string.Empty, + deleteAction: string.Empty, + fields: new() + { + new(user => user.FirstName, L["First Name"]), + new(user => user.LastName, L["Last Name"]), + new(user => user.UserName, L["UserName"]), + new(user => user.Email, L["Email"]), + new(user => user.PhoneNumber, L["PhoneNumber"]), + new(user => user.EmailConfirmed, L["Email Confirmation"], Type: typeof(bool)), + new(user => user.IsActive, L["Active"], Type: typeof(bool)) + }, + idFunc: user => user.Id, + loadDataFunc: async () => (await UsersClient.GetListAsync()).ToList(), + searchFunc: (searchString, user) => + string.IsNullOrWhiteSpace(searchString) + || user.FirstName?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true + || user.LastName?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true + || user.Email?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true + || user.PhoneNumber?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true + || user.UserName?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true, + createFunc: user => UsersClient.CreateAsync(user), + hasExtraActionsFunc: () => true, + exportAction: string.Empty); + } + + private void ViewProfile(in Guid userId) => + Navigation.NavigateTo($"/users/{userId}/profile"); + + private void ManageRoles(in Guid userId) => + Navigation.NavigateTo($"/users/{userId}/roles"); + + private void TogglePasswordVisibility() + { + if (_passwordVisibility) + { + _passwordVisibility = false; + _passwordInputIcon = Icons.Material.Filled.VisibilityOff; + _passwordInput = InputType.Password; + } + else + { + _passwordVisibility = true; + _passwordInputIcon = Icons.Material.Filled.Visibility; + _passwordInput = InputType.Text; + } + + Context.AddEditModal.ForceRender(); + } +} \ No newline at end of file diff --git a/src/Client/Pages/Index.razor b/src/Client/Pages/Index.razor new file mode 100644 index 0000000..42798ac --- /dev/null +++ b/src/Client/Pages/Index.razor @@ -0,0 +1,95 @@ +@page "/home" +@page "/" + +@inject IStringLocalizer L + + + + +
+ +
+
+ + @L["fullstackhero's"] + @L["Blazor WebAssembly Boilerplate"] + + + + + @L["Built with the goodness of"] MudBlazor @L["Component Library"]. + + + @L["Compatible with"] fullstackhero .NET WebAPI Boilerplate v1. + + + +
+ @L["Get Started"] + @L["Star on GitHub"] +
+
+ + @L["Version 1.0"] + + + + + @L["In case you are stuck anywhere or have any queries regarding this implementation, I have compiled a Quick Start Guide for you reference."] + @L["Read The Guide"] + + + + + + + + + @L["Here are few articles that should help you get started with Blazor."] + + + + + + + + + + + + @L["Application Claims of the currently logged in user."] + + @if (Claims is not null) + { + @foreach (var claim in Claims) + { + + + @claim.Type + + @claim.Value + + } + } + + + + + + @L["Liked this Boilerplate? Star us on Github!"] + +
+
+ +@code { + [CascadingParameter] + public Task AuthState { get; set; } = default!; + + public IEnumerable? Claims { get; set; } + + protected override async Task OnInitializedAsync() + { + var authState = await AuthState; + Claims = authState.User.Claims; + } +} \ No newline at end of file diff --git a/src/Client/Pages/Multitenancy/Tenants.razor b/src/Client/Pages/Multitenancy/Tenants.razor new file mode 100644 index 0000000..3f3da22 --- /dev/null +++ b/src/Client/Pages/Multitenancy/Tenants.razor @@ -0,0 +1,107 @@ +@page "/tenants" +@attribute [MustHavePermission(FSHAction.View, FSHResource.Tenants)] + +@inject IStringLocalizer L +@inject IAuthenticationService Authentication + + + + + + + + + + + + + + + + + + @if (Authentication.ProviderType == AuthProvider.AzureAd) + { + + + + } + + + @if(_canUpgrade) + { + @L["Upgrade Subscription"] + } + + @((context.ShowDetails == true) ? L["Hide"] : L["Show"]) @L["Tenant Details"] + + @if (_canModify) + { + @if (!context.IsActive) + { + @L["Activate Tenant"] + } + else + { + @L["Deactivate Tenant"] + } + } + + + + @if (context.ShowDetails) + { + + + + + + @L["Details for Tenant"] : + @context.Id + + + + + + + + @if(string.IsNullOrEmpty(context.ConnectionString?.Trim())) + { + @L["Shared Database"] + } + else + { + + + } + + @if (Authentication.ProviderType == AuthProvider.AzureAd) + { + + + + + } + +
@L["Connection String"] + + @context.ConnectionString?.Trim() + +
@L["Issuer"] + + + @context.Issuer?.Trim() + + +
+
+
+ +
+ } +
+ +
\ No newline at end of file diff --git a/src/Client/Pages/Multitenancy/Tenants.razor.cs b/src/Client/Pages/Multitenancy/Tenants.razor.cs new file mode 100644 index 0000000..7d23257 --- /dev/null +++ b/src/Client/Pages/Multitenancy/Tenants.razor.cs @@ -0,0 +1,121 @@ +using RewardsPlus.BlazorWebAssembly.Client.Components.EntityTable; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth; +using RewardsPlus.BlazorWebAssembly.Client.Shared; +using RewardsPlus.WebApi.Shared.Authorization; +using Mapster; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Pages.Multitenancy; + +public partial class Tenants +{ + [Inject] + private ITenantsClient TenantsClient { get; set; } = default!; + private string? _searchString; + protected EntityClientTableContext Context { get; set; } = default!; + private List _tenants = new(); + public EntityTable EntityTable { get; set; } = default!; + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + [Inject] + protected IAuthorizationService AuthService { get; set; } = default!; + + private bool _canUpgrade; + private bool _canModify; + + protected override async Task OnInitializedAsync() + { + Context = new( + entityName: L["Tenant"], + entityNamePlural: L["Tenants"], + entityResource: FSHResource.Tenants, + searchAction: FSHAction.View, + deleteAction: string.Empty, + updateAction: string.Empty, + fields: new() + { + new(tenant => tenant.Id, L["Id"]), + new(tenant => tenant.Name, L["Name"]), + new(tenant => tenant.AdminEmail, L["Admin Email"]), + new(tenant => tenant.ValidUpto.ToString("MMM dd, yyyy"), L["Valid Upto"]), + new(tenant => tenant.IsActive, L["Active"], Type: typeof(bool)) + }, + loadDataFunc: async () => _tenants = (await TenantsClient.GetListAsync()).Adapt>(), + searchFunc: (searchString, tenantDto) => + string.IsNullOrWhiteSpace(searchString) + || tenantDto.Name.Contains(searchString, StringComparison.OrdinalIgnoreCase), + createFunc: tenant => TenantsClient.CreateAsync(tenant.Adapt()), + hasExtraActionsFunc: () => true, + exportAction: string.Empty); + + var state = await AuthState; + _canUpgrade = await AuthService.HasPermissionAsync(state.User, FSHAction.UpgradeSubscription, FSHResource.Tenants); + _canModify = await AuthService.HasPermissionAsync(state.User, FSHAction.Update, FSHResource.Tenants); + } + + private void ViewTenantDetails(string id) + { + var tenant = _tenants.First(f => f.Id == id); + tenant.ShowDetails = !tenant.ShowDetails; + foreach (var otherTenants in _tenants.Except(new[] { tenant })) + { + otherTenants.ShowDetails = false; + } + } + + private async Task ViewUpgradeSubscriptionModalAsync(string id) + { + var tenant = _tenants.First(f => f.Id == id); + var parameters = new DialogParameters + { + { + nameof(UpgradeSubscriptionModal.Request), + new UpgradeSubscriptionRequest + { + TenantId = tenant.Id, + ExtendedExpiryDate = tenant.ValidUpto + } + } + }; + var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true, DisableBackdropClick = true }; + var dialog = DialogService.Show(L["Upgrade Subscription"], parameters, options); + var result = await dialog.Result; + if (!result.Cancelled) + { + await EntityTable.ReloadDataAsync(); + } + } + + private async Task DeactivateTenantAsync(string id) + { + if (await ApiHelper.ExecuteCallGuardedAsync( + () => TenantsClient.DeactivateAsync(id), + Snackbar, + null, + L["Tenant Deactivated."]) is not null) + { + await EntityTable.ReloadDataAsync(); + } + } + + private async Task ActivateTenantAsync(string id) + { + if (await ApiHelper.ExecuteCallGuardedAsync( + () => TenantsClient.ActivateAsync(id), + Snackbar, + null, + L["Tenant Activated."]) is not null) + { + await EntityTable.ReloadDataAsync(); + } + } + + public class TenantDetail : TenantDto + { + public bool ShowDetails { get; set; } + } +} \ No newline at end of file diff --git a/src/Client/Pages/Multitenancy/UpgradeSubscriptionModal.razor b/src/Client/Pages/Multitenancy/UpgradeSubscriptionModal.razor new file mode 100644 index 0000000..48921de --- /dev/null +++ b/src/Client/Pages/Multitenancy/UpgradeSubscriptionModal.razor @@ -0,0 +1,58 @@ +@inject IStringLocalizer L +@inject ITenantsClient TenantsClient + + + + + + + @L["Upgrade Subscription"] + + + + + + + + + + + + + + + + + @L["Cancel"] + @L["Upgrade"] + + + + +@code +{ + [Parameter] public UpgradeSubscriptionRequest Request { get; set; } = new(); + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; + DateTime? date = DateTime.Today; + + protected override void OnInitialized() => + date = Request.ExtendedExpiryDate; + + private async Task UpgradeSubscriptionAsync() + { + Request.ExtendedExpiryDate = date.HasValue ? date.Value : Request.ExtendedExpiryDate; + if (await ApiHelper.ExecuteCallGuardedAsync( + () => TenantsClient.UpgradeSubscriptionAsync(Request.TenantId, Request), + Snackbar, + null, + L["Upgraded Subscription."]) is not null) + { + MudDialog.Close(); + } + } + + public void Cancel() + { + MudDialog.Cancel(); + } +} \ No newline at end of file diff --git a/src/Client/Pages/Personal/AuditLogs.razor b/src/Client/Pages/Personal/AuditLogs.razor new file mode 100644 index 0000000..d10503a --- /dev/null +++ b/src/Client/Pages/Personal/AuditLogs.razor @@ -0,0 +1,131 @@ +@page "/audit-logs" + +@inject IStringLocalizer L + + + + + + + @L["Search in Old Values"] + @L["Search in New Values"] + + + @L["Clear"] + @L["Cancel"] + @L["Ok"] + + + + + + @((context.ShowDetails == true) ? L["Hide"] : L["Show"]) @L["Trail Details"] + + + + @if (context.ShowDetails) + { + + + + + + @L["Details for Trail ID"] : @context.Id + + + + + + @if (!string.IsNullOrEmpty(context.AffectedColumns)) + { + + + + + } + + + + + @if (!string.IsNullOrEmpty(context.OldValues)) + { + + + + + } + @if (!string.IsNullOrEmpty(context.NewValues)) + { + + + + + } + +
@L["Columns Affected"] + + @foreach (var column in context.AffectedColumns.Trim('[').Trim(']').Split(',')) + { + @column.Replace('"', ' ').Trim() + } + +
@L["Primary Key"] + + @context.PrimaryKey?.Trim('{').Trim('}').Replace('"', ' ').Trim() + +
@L["Old Values"] + + + @foreach (var value in context.OldValues.Trim('{').Trim('}').Split(',')) + { + @if (_searchInOldValues) + { + + + + } + else + { + @value.Replace('"', ' ').Trim() + } + } + +
@L["New Values"] + + + @foreach (var value in context.NewValues.Trim('{').Trim('}').Split(',')) + { + @if (_searchInNewValues) + { + + + + } + else + { + @value.Replace('"', ' ').Trim() + } + } + +
+
+
+ +
+ } +
+ +
+ +@code { + private RenderFragment DateFieldTemplate => trail => __builder => + { + + @L["Local"] : @trail.LocalTime.ToString("G") + + + @L["UTC"] : @trail.DateTime.ToString("G") + + }; +} \ No newline at end of file diff --git a/src/Client/Pages/Personal/AuditLogs.razor.cs b/src/Client/Pages/Personal/AuditLogs.razor.cs new file mode 100644 index 0000000..cd71c2c --- /dev/null +++ b/src/Client/Pages/Personal/AuditLogs.razor.cs @@ -0,0 +1,71 @@ +using RewardsPlus.BlazorWebAssembly.Client.Components.EntityTable; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using Mapster; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Pages.Personal; + +public partial class AuditLogs +{ + [Inject] + private IPersonalClient PersonalClient { get; set; } = default!; + + protected EntityClientTableContext Context { get; set; } = default!; + + private string? _searchString; + private MudDateRangePicker _dateRangePicker = default!; + private DateRange? _dateRange; + private bool _searchInOldValues; + private bool _searchInNewValues; + private List _trails = new(); + + // Configure Automapper + static AuditLogs() => + TypeAdapterConfig.NewConfig().Map( + dest => dest.LocalTime, + src => DateTime.SpecifyKind(src.DateTime, DateTimeKind.Utc).ToLocalTime()); + + protected override void OnInitialized() + { + Context = new( + entityNamePlural: L["Trails"], + searchAction: true.ToString(), + fields: new() + { + new(audit => audit.Id, L["Id"]), + new(audit => audit.TableName, L["Table Name"]), + new(audit => audit.DateTime, L["Date"], Template: DateFieldTemplate), + new(audit => audit.Type, L["Type"]) + }, + loadDataFunc: async () => _trails = (await PersonalClient.GetLogsAsync()).Adapt>(), + searchFunc: (searchString, trail) => + (string.IsNullOrWhiteSpace(searchString) // check Search String + || trail.TableName?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true + || (_searchInOldValues && + trail.OldValues?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true) + || (_searchInNewValues && + trail.NewValues?.Contains(searchString, StringComparison.OrdinalIgnoreCase) == true)) + && ((_dateRange?.Start is null && _dateRange?.End is null) // check Date Range + || (_dateRange?.Start is not null && _dateRange.End is null && trail.DateTime >= _dateRange.Start) + || (_dateRange?.Start is null && _dateRange?.End is not null && trail.DateTime <= _dateRange.End + new TimeSpan(0, 11, 59, 59, 999)) + || (trail.DateTime >= _dateRange!.Start && trail.DateTime <= _dateRange.End + new TimeSpan(0, 11, 59, 59, 999))), + hasExtraActionsFunc: () => true); + } + + private void ShowBtnPress(Guid id) + { + var trail = _trails.First(f => f.Id == id); + trail.ShowDetails = !trail.ShowDetails; + foreach (var otherTrail in _trails.Except(new[] { trail })) + { + otherTrail.ShowDetails = false; + } + } + + public class RelatedAuditTrail : AuditDto + { + public bool ShowDetails { get; set; } + public DateTime LocalTime { get; set; } + } +} \ No newline at end of file diff --git a/src/Client/Pages/Personal/Dashboard.razor b/src/Client/Pages/Personal/Dashboard.razor new file mode 100644 index 0000000..5e2fd94 --- /dev/null +++ b/src/Client/Pages/Personal/Dashboard.razor @@ -0,0 +1,65 @@ +@page "/dashboard" +@attribute [MustHavePermission(FSHAction.View, FSHResource.Dashboard)] + +@inject IStringLocalizer L + + + +@if (!_loaded) +{ + +} +else +{ + + + + +
+ @L["Products"] + @ProductCount +
+
+
+ + + +
+ @L["Brands"] + @BrandCount +
+
+
+ + + +
+ @L["Registered Users"] + + @UserCount +
+
+
+ + + +
+ @L["Registered Roles"] + + @RoleCount +
+
+
+ + + + + +
+} \ No newline at end of file diff --git a/src/Client/Pages/Personal/Dashboard.razor.cs b/src/Client/Pages/Personal/Dashboard.razor.cs new file mode 100644 index 0000000..a67e66c --- /dev/null +++ b/src/Client/Pages/Personal/Dashboard.razor.cs @@ -0,0 +1,62 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Notifications; +using RewardsPlus.BlazorWebAssembly.Client.Shared; +using RewardsPlus.WebApi.Shared.Notifications; +using MediatR.Courier; +using Microsoft.AspNetCore.Components; + +namespace RewardsPlus.BlazorWebAssembly.Client.Pages.Personal; + +public partial class Dashboard +{ + [Parameter] + public int ProductCount { get; set; } + [Parameter] + public int BrandCount { get; set; } + [Parameter] + public int UserCount { get; set; } + [Parameter] + public int RoleCount { get; set; } + + [Inject] + private IDashboardClient DashboardClient { get; set; } = default!; + [Inject] + private ICourier Courier { get; set; } = default!; + + private readonly string[] _dataEnterBarChartXAxisLabels = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; + private readonly List _dataEnterBarChartSeries = new(); + private bool _loaded; + + protected override async Task OnInitializedAsync() + { + Courier.SubscribeWeak>(async _ => + { + await LoadDataAsync(); + StateHasChanged(); + }); + + await LoadDataAsync(); + + _loaded = true; + } + + private async Task LoadDataAsync() + { + if (await ApiHelper.ExecuteCallGuardedAsync( + () => DashboardClient.GetAsync(), + Snackbar) + is StatsDto statsDto) + { + ProductCount = statsDto.ProductCount; + BrandCount = statsDto.BrandCount; + UserCount = statsDto.UserCount; + RoleCount = statsDto.RoleCount; + foreach (var item in statsDto.DataEnterBarChart) + { + _dataEnterBarChartSeries + .RemoveAll(x => x.Name.Equals(item.Name, StringComparison.OrdinalIgnoreCase)); + _dataEnterBarChartSeries.Add(new MudBlazor.ChartSeries { Name = item.Name, Data = item.Data?.ToArray() }); + } + } + } +} \ No newline at end of file diff --git a/src/Client/Program.cs b/src/Client/Program.cs new file mode 100644 index 0000000..470dacd --- /dev/null +++ b/src/Client/Program.cs @@ -0,0 +1,30 @@ +using System.Globalization; +using RewardsPlus.BlazorWebAssembly.Client; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Common; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Preferences; +using Microsoft.AspNetCore.Components.Web; +using Microsoft.AspNetCore.Components.WebAssembly.Hosting; + +var builder = WebAssemblyHostBuilder.CreateDefault(args); + +builder.RootComponents.Add("#app"); +builder.RootComponents.Add("head::after"); + +builder.Services.AddClientServices(builder.Configuration); + +var host = builder.Build(); + +var storageService = host.Services.GetRequiredService(); +if (storageService != null) +{ + CultureInfo culture; + if (await storageService.GetPreference() is ClientPreference preference) + culture = new CultureInfo(preference.LanguageCode); + else + culture = new CultureInfo(LocalizationConstants.SupportedLanguages.FirstOrDefault()?.Code ?? "en-US"); + CultureInfo.DefaultThreadCurrentCulture = culture; + CultureInfo.DefaultThreadCurrentUICulture = culture; +} + +await host.RunAsync(); \ No newline at end of file diff --git a/src/Client/Properties/launchSettings.json b/src/Client/Properties/launchSettings.json new file mode 100644 index 0000000..ec01420 --- /dev/null +++ b/src/Client/Properties/launchSettings.json @@ -0,0 +1,30 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:21716", + "sslPort": 44331 + } + }, + "profiles": { + "FSH.BlazorWebAssembly": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "https://localhost:5002;http://localhost:5003", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} \ No newline at end of file diff --git a/src/Client/Resources/Components/Common/TablePager.ar.resx b/src/Client/Resources/Components/Common/TablePager.ar.resx new file mode 100644 index 0000000..61567a8 --- /dev/null +++ b/src/Client/Resources/Components/Common/TablePager.ar.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} من {all_items} + + + صف لكل صفحة + + \ No newline at end of file diff --git a/src/Client/Resources/Components/Common/TablePager.de.resx b/src/Client/Resources/Components/Common/TablePager.de.resx new file mode 100644 index 0000000..bce5fdf --- /dev/null +++ b/src/Client/Resources/Components/Common/TablePager.de.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} von {all_items} + + + Zeilen je Seite: + + \ No newline at end of file diff --git a/src/Client/Resources/Components/Common/TablePager.en.resx b/src/Client/Resources/Components/Common/TablePager.en.resx new file mode 100644 index 0000000..eef54b7 --- /dev/null +++ b/src/Client/Resources/Components/Common/TablePager.en.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} of {all_items} + + + Rows per page: + + \ No newline at end of file diff --git a/src/Client/Resources/Components/Common/TablePager.es.resx b/src/Client/Resources/Components/Common/TablePager.es.resx new file mode 100644 index 0000000..9971ad9 --- /dev/null +++ b/src/Client/Resources/Components/Common/TablePager.es.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} de {all_items} + + + Registros por página: + + \ No newline at end of file diff --git a/src/Client/Resources/Components/Common/TablePager.fr.resx b/src/Client/Resources/Components/Common/TablePager.fr.resx new file mode 100644 index 0000000..4ed5249 --- /dev/null +++ b/src/Client/Resources/Components/Common/TablePager.fr.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} sur {all_items} + + + Lignes par page : + + \ No newline at end of file diff --git a/src/Client/Resources/Components/Common/TablePager.id.resx b/src/Client/Resources/Components/Common/TablePager.id.resx new file mode 100644 index 0000000..b45e839 --- /dev/null +++ b/src/Client/Resources/Components/Common/TablePager.id.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} dari {all_items} + + + Baris per halaman: + + \ No newline at end of file diff --git a/src/Client/Resources/Components/Common/TablePager.it.resx b/src/Client/Resources/Components/Common/TablePager.it.resx new file mode 100644 index 0000000..338aa89 --- /dev/null +++ b/src/Client/Resources/Components/Common/TablePager.it.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} di {all_items} + + + Righe per pagina: + + \ No newline at end of file diff --git a/src/Client/Resources/Components/Common/TablePager.km.resx b/src/Client/Resources/Components/Common/TablePager.km.resx new file mode 100644 index 0000000..ba27d45 --- /dev/null +++ b/src/Client/Resources/Components/Common/TablePager.km.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} នៃ {all_items} + + + ជួរដេកក្នុងមួយទំព័រ៖ + + \ No newline at end of file diff --git a/src/Client/Resources/Components/Common/TablePager.nl.resx b/src/Client/Resources/Components/Common/TablePager.nl.resx new file mode 100644 index 0000000..bac82ce --- /dev/null +++ b/src/Client/Resources/Components/Common/TablePager.nl.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} of {all_items} + + + Rijen per pagina: + + \ No newline at end of file diff --git a/src/Client/Resources/Components/Common/TablePager.ru.resx b/src/Client/Resources/Components/Common/TablePager.ru.resx new file mode 100644 index 0000000..7a5d02c --- /dev/null +++ b/src/Client/Resources/Components/Common/TablePager.ru.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} из {all_items} + + + Строк на странице: + + \ No newline at end of file diff --git a/src/Client/Resources/Components/Common/TablePager.sv.resx b/src/Client/Resources/Components/Common/TablePager.sv.resx new file mode 100644 index 0000000..d28249a --- /dev/null +++ b/src/Client/Resources/Components/Common/TablePager.sv.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + {first_item}-{last_item} of {all_items} + + + Rader per sida: + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Register.ar.resx b/src/Client/Resources/Pages/Account/Register.ar.resx new file mode 100644 index 0000000..bc64cb0 --- /dev/null +++ b/src/Client/Resources/Pages/Account/Register.ar.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + هل لديك حساب؟ + + + بريد الالكتروني + + + أوافق على الشروط والخصوصية + + + كلمه السر + + + رقم الهاتف + + + اشتراك + + + تسجيل الدخول + + + اشتراك + + + اسم المستخدم + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Register.de.resx b/src/Client/Resources/Pages/Account/Register.de.resx new file mode 100644 index 0000000..59166f3 --- /dev/null +++ b/src/Client/Resources/Pages/Account/Register.de.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bereits registriert? + + + E-Mail + + + Ich stimme den Nutzungs- und Datenschutzbedingungen zu. + + + Passwort + + + Telefon + + + Registrieren + + + Anmelden + + + Registrieren + + + Benutzername + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Register.en.resx b/src/Client/Resources/Pages/Account/Register.en.resx new file mode 100644 index 0000000..d8c326d --- /dev/null +++ b/src/Client/Resources/Pages/Account/Register.en.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Already have an account? + + + E-mail + + + I agree to the terms and privacy + + + Password + + + Phone Number + + + Register + + + Sign In + + + Sign Up + + + Username + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Register.es.resx b/src/Client/Resources/Pages/Account/Register.es.resx new file mode 100644 index 0000000..8ff1bdf --- /dev/null +++ b/src/Client/Resources/Pages/Account/Register.es.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ¿Ya tiene una cuenta? + + + Correo + + + Acepto los términos y condiciones + + + Contraseña + + + Teléfono + + + Registrarse + + + Ingresar + + + Registrarse + + + Usuario + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Register.fr.resx b/src/Client/Resources/Pages/Account/Register.fr.resx new file mode 100644 index 0000000..e912e94 --- /dev/null +++ b/src/Client/Resources/Pages/Account/Register.fr.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Vous possédez déjà un compte ? + + + Courriel + + + J'accepte les conditions d'utilisation et la politique de confidentialité + + + Mot de passe + + + Numéro de téléphone + + + S'inscrire + + + Se connecter + + + S'inscrire + + + Nom d'utilisateur + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Register.id.resx b/src/Client/Resources/Pages/Account/Register.id.resx new file mode 100644 index 0000000..a9f2a0d --- /dev/null +++ b/src/Client/Resources/Pages/Account/Register.id.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Sudah punya akun? + + + E-mail + + + Saya setuju akan ketentuan dan kebijakan privasi + + + Sandi + + + Nomor Telepon + + + Daftar + + + Masuk + + + Daftar + + + Nama pengguna + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Register.it.resx b/src/Client/Resources/Pages/Account/Register.it.resx new file mode 100644 index 0000000..9cb4fdc --- /dev/null +++ b/src/Client/Resources/Pages/Account/Register.it.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Sei già registrato? + + + E-Mail + + + Accetto i termini e la privacy + + + Telefono + + + Registrati + + + Accedi + + + Iscriviti + + + Utente + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Register.km.resx b/src/Client/Resources/Pages/Account/Register.km.resx new file mode 100644 index 0000000..f6f8870 --- /dev/null +++ b/src/Client/Resources/Pages/Account/Register.km.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + មានគណនីរួចហើយ? + + + អ៊ីមែល + + + ខ្ញុំយល់ស្របនឹងលក្ខខណ្ឌនិងភាពឯកជន + + + លេខសម្ងាត់ + + + លេខទូរស័ព្ទ + + + ចុះឈ្មោះ + + + ចូល + + + ចុះ​ឈ្មោះ + + + ឈ្មោះ​អ្នកប្រើប្រាស់ + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Register.nl.resx b/src/Client/Resources/Pages/Account/Register.nl.resx new file mode 100644 index 0000000..0be70ca --- /dev/null +++ b/src/Client/Resources/Pages/Account/Register.nl.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Heb je al een account? + + + E-mail + + + Ik ga akkoord met de voorwaarden en privacy + + + Wachtwoord + + + Telefoonnummer + + + Registreren + + + Aanmelden + + + Inschrijven + + + Gebruikersnaam + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Register.ru.resx b/src/Client/Resources/Pages/Account/Register.ru.resx new file mode 100644 index 0000000..1ac7f04 --- /dev/null +++ b/src/Client/Resources/Pages/Account/Register.ru.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Уже имеете аккаунт? + + + E-mail + + + Я согласен с условиями и конфиденциальностью + + + Пароль + + + Номер телефона + + + Зарегистрировать + + + Авторизация + + + Регистрация + + + Username + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Register.sv.resx b/src/Client/Resources/Pages/Account/Register.sv.resx new file mode 100644 index 0000000..a8984ec --- /dev/null +++ b/src/Client/Resources/Pages/Account/Register.sv.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Har du redan ett konto? + + + Epost + + + Jag godkänner villkoren och integriteten + + + Lösenord + + + Telefonnummer + + + Registrera + + + Logga In + + + Bli Medlem + + + Användarnamn + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Reset.ar.resx b/src/Client/Resources/Pages/Account/Reset.ar.resx new file mode 100644 index 0000000..dfc9fd2 --- /dev/null +++ b/src/Client/Resources/Pages/Account/Reset.ar.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أوافق على الشروط والخصوصية + + + كلمة مرور جديدة + + + ضع كلمة مرور جديدة + + + لم يتم العثور على الرمز! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Reset.de.resx b/src/Client/Resources/Pages/Account/Reset.de.resx new file mode 100644 index 0000000..530dfed --- /dev/null +++ b/src/Client/Resources/Pages/Account/Reset.de.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ich stimme den Nutzungs- und Datenschutzbestimmungen zu. + + + Neues Passwort + + + Neues Passwort festlegen + + + Token nicht gefunden! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Reset.en.resx b/src/Client/Resources/Pages/Account/Reset.en.resx new file mode 100644 index 0000000..51f60ad --- /dev/null +++ b/src/Client/Resources/Pages/Account/Reset.en.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + I agree to the terms and privacy + + + New Password + + + Set new password + + + Token Not Found! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Reset.es.resx b/src/Client/Resources/Pages/Account/Reset.es.resx new file mode 100644 index 0000000..f6f44bc --- /dev/null +++ b/src/Client/Resources/Pages/Account/Reset.es.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acepto los términos y condiciones + + + Nueva contraseña + + + Establecer contraseña + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Reset.fr.resx b/src/Client/Resources/Pages/Account/Reset.fr.resx new file mode 100644 index 0000000..8019f31 --- /dev/null +++ b/src/Client/Resources/Pages/Account/Reset.fr.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + J'accepte les conditions d'utilisation et la politique de confidentialité + + + Nouveau mot de passe + + + Définir le nouveau mot de passe + + + Jeton introuvable ! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Reset.id.resx b/src/Client/Resources/Pages/Account/Reset.id.resx new file mode 100644 index 0000000..d169911 --- /dev/null +++ b/src/Client/Resources/Pages/Account/Reset.id.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Saya setuju akan ketentuan dan kebijakan privasi + + + Sandi baru + + + Atur sandi baru + + + Token Tidak Ditemukan! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Reset.it.resx b/src/Client/Resources/Pages/Account/Reset.it.resx new file mode 100644 index 0000000..0d29f14 --- /dev/null +++ b/src/Client/Resources/Pages/Account/Reset.it.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Accetto i termini e la privacy + + + Nuova Password + + + Token non trovato! + + + Imposta nuova password + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Reset.km.resx b/src/Client/Resources/Pages/Account/Reset.km.resx new file mode 100644 index 0000000..e302b84 --- /dev/null +++ b/src/Client/Resources/Pages/Account/Reset.km.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ខ្ញុំយល់ស្របនឹងលក្ខខណ្ឌនិងភាពឯកជន + + + ពាក្យសម្ងាត់​ថ្មី + + + កំណត់ពាក្យសម្ងាត់ថ្មី + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Reset.nl.resx b/src/Client/Resources/Pages/Account/Reset.nl.resx new file mode 100644 index 0000000..30f308e --- /dev/null +++ b/src/Client/Resources/Pages/Account/Reset.nl.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ik ga akkoord met de voorwaarden en privacy + + + Nieuw wachtwoord + + + Nieuw wachtwoord instellen + + + Token niet gevonden! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Reset.ru.resx b/src/Client/Resources/Pages/Account/Reset.ru.resx new file mode 100644 index 0000000..acf21ac --- /dev/null +++ b/src/Client/Resources/Pages/Account/Reset.ru.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Я согласен с условиями и конфиденциальностью + + + Новый пароль + + + Установить новый пароль + + + Токен не найден! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Account/Reset.sv.resx b/src/Client/Resources/Pages/Account/Reset.sv.resx new file mode 100644 index 0000000..f1f44a3 --- /dev/null +++ b/src/Client/Resources/Pages/Account/Reset.sv.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Jag godkänner villkoren och integriteten + + + Nytt Lösenord + + + Det nya lösenordet + + + Token hittades inte! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Authentication.ar.resx b/src/Client/Resources/Pages/Authentication/Authentication.ar.resx new file mode 100644 index 0000000..c331d00 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Authentication.ar.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You were successfully logged out. + + + Click here to log back in + + + Logging you in... + + + Checking permissions... + + + Sorry, your login failed. Please try again or contact support. + + + Logging you out... + + + Sorry, log out operation failed. Please try again or contact support. + + + Retrieving profile... + + + Registering account... + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Authentication.de.resx b/src/Client/Resources/Pages/Authentication/Authentication.de.resx new file mode 100644 index 0000000..94f8d99 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Authentication.de.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Du wurdest erfolgreich ausgeloggt. + + + Klicke hier, um dich wieder einzuloggen. + + + Du wirst eingeloggt... + + + Überprüfe Berechtigungen... + + + Entschuldigung, dein Login ist fehlgeschlagen. Versuche es noch einmal oder kontaktiere den Support. + + + Du wirst ausgeloggt... + + + Entschuldigung, dein Logout ist fehlgeschlagen. Versuche es noch einmal oder kontaktiere den Support. + + + Profil wird abgerufen... + + + Konto wird registriert... + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Authentication.en.resx b/src/Client/Resources/Pages/Authentication/Authentication.en.resx new file mode 100644 index 0000000..c331d00 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Authentication.en.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You were successfully logged out. + + + Click here to log back in + + + Logging you in... + + + Checking permissions... + + + Sorry, your login failed. Please try again or contact support. + + + Logging you out... + + + Sorry, log out operation failed. Please try again or contact support. + + + Retrieving profile... + + + Registering account... + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Authentication.es.resx b/src/Client/Resources/Pages/Authentication/Authentication.es.resx new file mode 100644 index 0000000..c331d00 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Authentication.es.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You were successfully logged out. + + + Click here to log back in + + + Logging you in... + + + Checking permissions... + + + Sorry, your login failed. Please try again or contact support. + + + Logging you out... + + + Sorry, log out operation failed. Please try again or contact support. + + + Retrieving profile... + + + Registering account... + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Authentication.fr.resx b/src/Client/Resources/Pages/Authentication/Authentication.fr.resx new file mode 100644 index 0000000..c331d00 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Authentication.fr.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You were successfully logged out. + + + Click here to log back in + + + Logging you in... + + + Checking permissions... + + + Sorry, your login failed. Please try again or contact support. + + + Logging you out... + + + Sorry, log out operation failed. Please try again or contact support. + + + Retrieving profile... + + + Registering account... + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Authentication.id.resx b/src/Client/Resources/Pages/Authentication/Authentication.id.resx new file mode 100644 index 0000000..c331d00 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Authentication.id.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You were successfully logged out. + + + Click here to log back in + + + Logging you in... + + + Checking permissions... + + + Sorry, your login failed. Please try again or contact support. + + + Logging you out... + + + Sorry, log out operation failed. Please try again or contact support. + + + Retrieving profile... + + + Registering account... + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Authentication.it.resx b/src/Client/Resources/Pages/Authentication/Authentication.it.resx new file mode 100644 index 0000000..c015459 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Authentication.it.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Sei stato disconnesso con successo. + + + Clicca qui per accedere indietro + + + Registrarti in ... + + + Controllo Autorizzazioni ... + + + Siamo spiacenti, il tuo login è fallito. Si prega di riprovare o contattare il supporto. + + + Disattivandoti ... + + + Siamo spiacenti, operazione di disconnessione fallito. Si prega di riprovare o contattare il supporto. + + + Recupero del profilo ... + + + Registrazione dell'account ... + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Authentication.km.resx b/src/Client/Resources/Pages/Authentication/Authentication.km.resx new file mode 100644 index 0000000..c331d00 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Authentication.km.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You were successfully logged out. + + + Click here to log back in + + + Logging you in... + + + Checking permissions... + + + Sorry, your login failed. Please try again or contact support. + + + Logging you out... + + + Sorry, log out operation failed. Please try again or contact support. + + + Retrieving profile... + + + Registering account... + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Authentication.nl.resx b/src/Client/Resources/Pages/Authentication/Authentication.nl.resx new file mode 100644 index 0000000..c331d00 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Authentication.nl.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You were successfully logged out. + + + Click here to log back in + + + Logging you in... + + + Checking permissions... + + + Sorry, your login failed. Please try again or contact support. + + + Logging you out... + + + Sorry, log out operation failed. Please try again or contact support. + + + Retrieving profile... + + + Registering account... + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Authentication.ru.resx b/src/Client/Resources/Pages/Authentication/Authentication.ru.resx new file mode 100644 index 0000000..c331d00 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Authentication.ru.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You were successfully logged out. + + + Click here to log back in + + + Logging you in... + + + Checking permissions... + + + Sorry, your login failed. Please try again or contact support. + + + Logging you out... + + + Sorry, log out operation failed. Please try again or contact support. + + + Retrieving profile... + + + Registering account... + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Authentication.sv.resx b/src/Client/Resources/Pages/Authentication/Authentication.sv.resx new file mode 100644 index 0000000..c331d00 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Authentication.sv.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You were successfully logged out. + + + Click here to log back in + + + Logging you in... + + + Checking permissions... + + + Sorry, your login failed. Please try again or contact support. + + + Logging you out... + + + Sorry, log out operation failed. Please try again or contact support. + + + Retrieving profile... + + + Registering account... + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/ForgotPassword.ar.resx b/src/Client/Resources/Pages/Authentication/ForgotPassword.ar.resx new file mode 100644 index 0000000..14e0972 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/ForgotPassword.ar.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + تم! + + + البريد الإلكتروني + + + أدخل عنوان البريد الإلكتروني المرتبط بحسابك وستتلقى رسالة بريد إلكتروني تحتوي على رابط لإعادة تعيين كلمة المرور الخاصة بك + + + هل نسيت كلمة السر? + + + إعادة تعيين كلمة المرور + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/ForgotPassword.de.resx b/src/Client/Resources/Pages/Authentication/ForgotPassword.de.resx new file mode 100644 index 0000000..f949b86 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/ForgotPassword.de.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Fertig! + + + E-Mail + + + E-Mail-Adresse eingeben, mit welcher das Konto verknüpft ist, um eine E-Mail zum zurücksetzen des Passworts zu erhalten. + + + Passwort vergessen? + + + Passwort zurücksetzen + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/ForgotPassword.en.resx b/src/Client/Resources/Pages/Authentication/ForgotPassword.en.resx new file mode 100644 index 0000000..5e4f57a --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/ForgotPassword.en.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Done! + + + E-Mail + + + Enter the email address linked to your account and you will recieve an email containing a link to reset your password + + + Forgot password? + + + Reset Password + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/ForgotPassword.es.resx b/src/Client/Resources/Pages/Authentication/ForgotPassword.es.resx new file mode 100644 index 0000000..31824cf --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/ForgotPassword.es.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Correo + + + Ingresa la dirección de correo vinculada a su cuenta y recibirá un correo con un enlace para blanquear la contraseña + + + ¿Olvidó su contraseña? + + + Blanquear contraseña + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/ForgotPassword.fr.resx b/src/Client/Resources/Pages/Authentication/ForgotPassword.fr.resx new file mode 100644 index 0000000..d887377 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/ForgotPassword.fr.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Terminé ! + + + Courriel + + + Sasissez le courriel lié à votre compte et vous y recevrez un message contenant un lien pour réinitialiser votre mot de passe + + + Mot de passe oublié ? + + + Réinitialiser le mot de passe + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/ForgotPassword.id.resx b/src/Client/Resources/Pages/Authentication/ForgotPassword.id.resx new file mode 100644 index 0000000..52c8afd --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/ForgotPassword.id.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Selesai! + + + E-Mail + + + Masukkan alamat email yang terhubung ke akun anda dan anda akan menerima email berisi link untuk mereset password anda + + + Lupa password? + + + Reset Password + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/ForgotPassword.it.resx b/src/Client/Resources/Pages/Authentication/ForgotPassword.it.resx new file mode 100644 index 0000000..b300815 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/ForgotPassword.it.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Password dimenticata? + + + E-Mail + + + Ripristina Password + + + Fatto! + + + Inserisci l'indirizzo E-Mail collegato al tuo utente e riceverai un link per il ripristino della password. + + + Possiamo aiutarti ripristinando la password. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/ForgotPassword.km.resx b/src/Client/Resources/Pages/Authentication/ForgotPassword.km.resx new file mode 100644 index 0000000..b574e84 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/ForgotPassword.km.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + អ៊ីម៉ែល + + + បញ្ចូលអាសយដ្ឋានអ៊ីមែលដែលភ្ជាប់ទៅគណនីរបស់អ្នកហើយអ្នកនឹងទទួលបានអ៊ីមែលដែលមានតំណភ្ជាប់ដើម្បីកំណត់លេខសម្ងាត់របស់អ្នកឡើងវិញ + + + ភ្លេច​លេខសំងាត់​? + + + កំណត់ពាក្យសម្ងាត់ឡើងវិញ + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/ForgotPassword.nl.resx b/src/Client/Resources/Pages/Authentication/ForgotPassword.nl.resx new file mode 100644 index 0000000..d725b6c --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/ForgotPassword.nl.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + E-mail + + + Voer het e-mailadres in dat aan uw account is gekoppeld en u ontvangt een e-mail met een link om uw wachtwoord opnieuw in te stellen + + + Wachtwoord vergeten? + + + Wachtwoord opnieuw instellen + + + Klaar! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/ForgotPassword.ru.resx b/src/Client/Resources/Pages/Authentication/ForgotPassword.ru.resx new file mode 100644 index 0000000..9ff2cdc --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/ForgotPassword.ru.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Готово! + + + E-Mail + + + Введите email-адрес, прикреплённый к вашему аккаунту, и вы получите письмо, соржащее ссылку для сброса вашего пароля + + + Забыли пароль? + + + Сбросить пароль + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/ForgotPassword.sv.resx b/src/Client/Resources/Pages/Authentication/ForgotPassword.sv.resx new file mode 100644 index 0000000..7553815 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/ForgotPassword.sv.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Klart! + + + Epost + + + Fyll i din Epost-adress kopplat till ditt konto och du får ett mail med en länk för att nollställa ditt lösenord. + + + Glömt Lösenord? + + + Nollställ Lösenord + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Login.ar.resx b/src/Client/Resources/Pages/Authentication/Login.ar.resx new file mode 100644 index 0000000..a30f0a0 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Login.ar.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + تسجيل الدخول مع أوراق الاعتماد الخاصة بك. + + + ليس لديك حساب؟ + + + بريد الالكتروني + + + البريد الالكتروني مطلوب! + + + قم بتعبئة بيانات اعتماد المسؤول + + + املأ بيانات اعتماد المستخدم الأساسية + + + هل نسيت كلمة السر؟ + + + كلمه السر + + + كلمة المرور مطلوبة! + + + سجل هنا + + + تذكرنى؟ + + + تسجيل الدخول + + + عنوان + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Login.de.resx b/src/Client/Resources/Pages/Authentication/Login.de.resx new file mode 100644 index 0000000..4812f2f --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Login.de.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Mit Zugangsdaten anmelden + + + Du hast noch keine Konto? + + + E-Mail + + + E-Mail wird benötigt. + + + Gib deine Zugangsdaten + + + Mit Zugangsdaten des Administrators ausfüllen + + + Mit Basis-Zugangsdaten ausfüllen + + + Passwort vergessen? + + + Passwort + + + Passwort wird benötigt! + + + Registriere dich hier + + + Zugangsdaten speichern? + + + Anmelden + + + Anmelden + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Login.en.resx b/src/Client/Resources/Pages/Authentication/Login.en.resx new file mode 100644 index 0000000..e13f761 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Login.en.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Login with your Credentials. + + + Don't have an account? + + + E-mail + + + Email is required! + + + Enter your credentials to get started. + + + Fill Administrator Credentials + + + Fill Basic User Credentials + + + Forgot password? + + + Password + + + Password is required! + + + Register here + + + Remember me? + + + Sign In + + + Sign In + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Login.es.resx b/src/Client/Resources/Pages/Authentication/Login.es.resx new file mode 100644 index 0000000..3c5e771 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Login.es.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ingrese con sus credenciales. + + + ¿No tiene una cuenta? + + + Correo + + + El Correo es requerido! + + + Completar con Credenciales Administrador + + + Completar con Credenciales Usuario + + + ¿Olvidó su Contraseña? + + + Contraseña + + + La Contraseña es requerida! + + + Registrarse aquí + + + ¿Recordarme? + + + Ingresar + + + Ingresar + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Login.fr.resx b/src/Client/Resources/Pages/Authentication/Login.fr.resx new file mode 100644 index 0000000..8692631 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Login.fr.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Connectez-vous avec vos identifiants. + + + Courriel + + + Un courriel est requis ! + + + Mot de passe oublié ? + + + Mot de passe + + + Mot de passe requis ! + + + Se souvenir de moi ? + + + Connexion + + + Connexion + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Login.id.resx b/src/Client/Resources/Pages/Authentication/Login.id.resx new file mode 100644 index 0000000..28006ca --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Login.id.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Masuk dengan Kredensial Anda. + + + Tidak punya akun? + + + E-mail + + + Email wajib diisi! + + + Isi Kredensial Administrator + + + Isi Kredensial Pengguna Basic + + + Lupa sandi? + + + Sandi + + + Sandi wajib diisi! + + + Daftar di sini + + + Ingat saya? + + + Masuk + + + Masuk + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Login.it.resx b/src/Client/Resources/Pages/Authentication/Login.it.resx new file mode 100644 index 0000000..bb48a76 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Login.it.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Accedi con le tue credenziali. + + + E-Mail + + + È richiesto un indirizzo E-Mail + + + Inserisci le tue credenziali per iniziare. + + + Utilizza credenziali amministrative + + + Utilizza credenziali utente base + + + Password dimenticata? + + + Password + + + È richiesta una password! + + + Ricordati di me? + + + Accedi + + + Accedi + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Login.km.resx b/src/Client/Resources/Pages/Authentication/Login.km.resx new file mode 100644 index 0000000..1bf008e --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Login.km.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ឡុកចូលប្រព័ន្ធជាមួយលេខកូដសម្ងាត់អ្នក + + + អ៊ីម៉ែល + + + ត្រូវការបំពេញអ៊ីម៉ែល + + + ភ្លេចលេខកូដសម្ងាត់? + + + លេខកូដសម្ងាត់ + + + ត្រូវការបំពេញលេខកូដសម្ងាត់ + + + ចងចាំក្នុងប្រព័ន្ធ? + + + ឡុកចូល + + + ឡុកចូល + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Login.nl.resx b/src/Client/Resources/Pages/Authentication/Login.nl.resx new file mode 100644 index 0000000..e0d271e --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Login.nl.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Log in met uw inloggegevens. + + + E-mail + + + E-mail is vereist! + + + Wachtwoord vergeten? + + + Wachtwoord + + + Wachtwoord is vereist! + + + Aanmelden + + + Aanmelden + + + Heb je geen account? + + + Beheerdersreferenties invullen + + + Basisgebruikersreferenties invullen + + + Schrijf je hier in + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Login.ru.resx b/src/Client/Resources/Pages/Authentication/Login.ru.resx new file mode 100644 index 0000000..ad69eb7 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Login.ru.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Авторизуйтесь с помощью ваших учётных данных. + + + У вас ещё нет аккаунта? + + + E-mail + + + Email обязателен! + + + Заполнить учётными данными администратора + + + Заполнить учётными данными пользователя с базовыми правами + + + Забыли пароль? + + + Пароль + + + Пароль обязателен! + + + Зарегистрируйтесь здесь + + + Запомнить меня? + + + Авторизоваться + + + Авторизация + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Login.sv.resx b/src/Client/Resources/Pages/Authentication/Login.sv.resx new file mode 100644 index 0000000..d236777 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Login.sv.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Logga in med dina uppgifter + + + Har du inget konto? + + + Epost + + + Epost är obligatoriskt + + + Fyll i Administratör Användaruppgifter + + + Fyll i Grundläggande Användaruppgifter + + + Glömt Lösenord? + + + Lösenord + + + Lösenord är obligatoriskt! + + + Registrera här + + + Kom ihåg mig? + + + Logga In + + + Logga In + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Register.ar.resx b/src/Client/Resources/Pages/Authentication/Register.ar.resx new file mode 100644 index 0000000..94332f5 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Register.ar.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + هل لديك حساب؟ + + + تأكيد كلمة المرور + + + بريد الالكتروني + + + الاسم الأول + + + الكنية + + + كلمه السر + + + رقم الهاتف + + + يسجل + + + تسجيل الدخول + + + اسم االمستخدم + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Register.de.resx b/src/Client/Resources/Pages/Authentication/Register.de.resx new file mode 100644 index 0000000..1bfb8a3 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Register.de.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Du hast schon ein Konto? + + + Passwort bestätigen + + + E-Mail + + + Vorname + + + Nachname + + + Passwort + + + Telefonnummer + + + Registrieren + + + Einloggen + + + Benutzername + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Register.en.resx b/src/Client/Resources/Pages/Authentication/Register.en.resx new file mode 100644 index 0000000..fe26547 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Register.en.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Already have an account? + + + Confirm Password + + + E-mail + + + First Name + + + Last Name + + + Password + + + Phone Number + + + Register + + + Sign In + + + User Name + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Register.es.resx b/src/Client/Resources/Pages/Authentication/Register.es.resx new file mode 100644 index 0000000..8010e7c --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Register.es.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ¿Ya tiene una cuenta? + + + Confirmar Contraseña + + + Correo + + + Nombre + + + Apellido + + + Contraseña + + + Número de Teléfono + + + Registrarse + + + Ingresar + + + Nombre de Usuario + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Register.fr.resx b/src/Client/Resources/Pages/Authentication/Register.fr.resx new file mode 100644 index 0000000..41e6323 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Register.fr.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Vous possédez déjà un compte ? + + + Confirmation du mot de passe + + + Courriel + + + Prénom + + + Nom + + + Mot de passe + + + Numéro de téléphone + + + S'inscrire + + + Se connecter + + + Nom d'utilisateur + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Register.id.resx b/src/Client/Resources/Pages/Authentication/Register.id.resx new file mode 100644 index 0000000..bbc2810 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Register.id.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Sudah punya akun? + + + Konfirmasi Password + + + E-mail + + + Nama Depan + + + Nama Belakang + + + Sandi + + + Nomor Telepon + + + Daftar + + + Masuk + + + User Name + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Register.it.resx b/src/Client/Resources/Pages/Authentication/Register.it.resx new file mode 100644 index 0000000..86387eb --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Register.it.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Hai già un account? + + + Conferma Password + + + E-mail + + + Nome + + + Cognome + + + Accetto i termini e la privacy + + + Telefono + + + Registrati + + + Registrati + + + Username + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Register.km.resx b/src/Client/Resources/Pages/Authentication/Register.km.resx new file mode 100644 index 0000000..0cf656e --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Register.km.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + មានគណនីរួចហើយ? + + + បញ្ជាក់លេខកូដសម្ងាត់ + + + អ៊ីម៉ែល + + + នាមខ្លួន + + + នាមត្រកូល + + + លេខកូដសម្ងាត់ + + + លេខទូរស័ព្ទ + + + ចុះឈ្មោះ + + + ឡុកចូល + + + ឈ្មោះអ្នកប្រើប្រាស់ + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Register.nl.resx b/src/Client/Resources/Pages/Authentication/Register.nl.resx new file mode 100644 index 0000000..e355b93 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Register.nl.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Heb je al een account? + + + Wachtwoord bevestigen + + + E-mail + + + Voornaam + + + Achternaam + + + Wachtwoord + + + Telefoonnummer + + + Registreren + + + Aanmelden + + + Gebruikersnaam + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Register.ru.resx b/src/Client/Resources/Pages/Authentication/Register.ru.resx new file mode 100644 index 0000000..6d4d7ed --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Register.ru.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + У вас уже есть аккаунт? + + + Подтверждение пароля + + + E-mail + + + Имя + + + Фамилия + + + Пароль + + + Номер телефона + + + Зарегистрировать + + + Авторизоваться + + + User Name + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Authentication/Register.sv.resx b/src/Client/Resources/Pages/Authentication/Register.sv.resx new file mode 100644 index 0000000..d3ac6a2 --- /dev/null +++ b/src/Client/Resources/Pages/Authentication/Register.sv.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Har du redan ett konto? + + + Bekräfta lösenord + + + E-post + + + Förnamn + + + Efternamn + + + Lösenord + + + Telefonnummer + + + Registrera dig + + + Logga In + + + Användarnamn + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditBrandModal.ar.resx b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.ar.resx new file mode 100644 index 0000000..32a2c4e --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.ar.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أضف العلامة التجارية + + + تم حفظ العلامة التجارية! + + + تم تحديث العلامة التجارية! + + + إلغاء + + + وصف + + + المعرّف + + + اسم + + + حفظ + + + ضريبة + + + تحديث + + + تحديث العلامة التجارية + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditBrandModal.de.resx b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.de.resx new file mode 100644 index 0000000..618b6ed --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.de.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Marke hinzufügen + + + Marke gespeichert! + + + Marke aktualisiert! + + + Abbrechen + + + Beschreibung + + + Id + + + Name + + + Speichern + + + Steuer + + + Aktualisieren + + + Martke Aktualisieren + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditBrandModal.en.resx b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.en.resx new file mode 100644 index 0000000..b8de313 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.en.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Brand + + + Brand Saved! + + + Brand Updated! + + + Cancel + + + Description + + + Id + + + Name + + + Save + + + Tax + + + Update + + + Update Brand + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditBrandModal.es.resx b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.es.resx new file mode 100644 index 0000000..bb9b491 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.es.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Agregar Marca + + + Marca Guardada! + + + Marca Actualizada! + + + Cancelar + + + Descripción + + + Id + + + Nombre + + + Guardar + + + Impuestos + + + Actualizar + + + Actualizar Marca + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditBrandModal.fr.resx b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.fr.resx new file mode 100644 index 0000000..732642a --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.fr.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ajouter une marque + + + Marque enregistrée ! + + + Marque mise à jour ! + + + Annuler + + + Description + + + Identifiant + + + Nom + + + Sauvegarder + + + Taxe + + + Mettre à jour + + + Édition d'une marque + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditBrandModal.id.resx b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.id.resx new file mode 100644 index 0000000..635c20b --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.id.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tambah Merek + + + Merek Tersimpan! + + + Merek Diperbarui! + + + Batal + + + Deskripsi + + + Id + + + Nama + + + Simpan + + + Pajak + + + Perbarui + + + Perbarui Merek + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditBrandModal.it.resx b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.it.resx new file mode 100644 index 0000000..56dc1eb --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.it.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Nuova marca + + + Marca salvata! + + + Marca aggiornata! + + + Annulla + + + Descrizione + + + Id + + + Nome + + + Salva + + + Imposta + + + Aggiorna + + + Aggiorna marca + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditBrandModal.km.resx b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.km.resx new file mode 100644 index 0000000..f29d99f --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.km.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + បន្ថែមម៉ាក + + + ម៉ាកបានរក្សាទុក! + + + ម៉ាកបានធ្វើបច្ចុប្បន្នភាព + + + បោះបង់ + + + ការពិពណ៌នា + + + លេខកូដសម្ងាល់ + + + ឈ្មោះ + + + រក្សាទុក + + + ពន្ធ + + + បច្ចុប្បន្នភាព + + + បច្ចុប្បន្នភាពម៉ាក + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditBrandModal.nl.resx b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.nl.resx new file mode 100644 index 0000000..13c6a94 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.nl.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Merk toevoegen + + + Merk gered! + + + Merk bijgewerkt! + + + Annuleren + + + Beschrijving + + + Id + + + Naam + + + Opslaan + + + Belasting + + + Update + + + Merk bijwerken + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditBrandModal.ru.resx b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.ru.resx new file mode 100644 index 0000000..2e506f3 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditBrandModal.ru.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Добавить бренд + + + Бренд сохранён + + + Бренд обновлён + + + Отмена + + + Описание + + + Id + + + Наименование + + + Сохранить + + + Сбор + + + Обновить + + + Обновить бренд + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditProductModal.ar.resx b/src/Client/Resources/Pages/Catalog/AddEditProductModal.ar.resx new file mode 100644 index 0000000..bcb9ce0 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditProductModal.ar.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أضف منتج + + + الشفره + + + ماركة + + + إلغاء + + + حذف + + + وصف + + + المعرّف + + + اسم + + + تم حفظ المنتج! + + + تم تحديث المنتج! + + + تقييم + + + حفظ + + + تحديث + + + تحديث المنتج + + + تحميل + + + عرض + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditProductModal.de.resx b/src/Client/Resources/Pages/Catalog/AddEditProductModal.de.resx new file mode 100644 index 0000000..1bf6eaa --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditProductModal.de.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Produkt hinzufügen + + + Strichcode + + + Marke + + + Abbrechen + + + Löschen + + + Beschreibung + + + Id + + + Name + + + Produkte gespeichert + + + Produkt aktualisiert + + + Bewertung + + + Speichern + + + Aktualisieren + + + Produkt aktualisieren + + + Upload + + + Ansicht + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditProductModal.en.resx b/src/Client/Resources/Pages/Catalog/AddEditProductModal.en.resx new file mode 100644 index 0000000..ef00fca --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditProductModal.en.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Product + + + Barcode + + + Brand + + + Cancel + + + Delete + + + Description + + + Id + + + Name + + + Product Saved! + + + Product Updated! + + + Rate + + + Save + + + Update + + + Update Product + + + Upload + + + View + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditProductModal.es.resx b/src/Client/Resources/Pages/Catalog/AddEditProductModal.es.resx new file mode 100644 index 0000000..1dabb2f --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditProductModal.es.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Agregar Producto + + + Código de barra + + + Marca + + + Cancelar + + + Eliminar + + + Descripción + + + Id + + + Nombre + + + Producto Guardado! + + + Producto Actualizado! + + + Precio + + + Guardar + + + Actualizar + + + Actualizar Producto + + + Subir + + + Ver + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditProductModal.fr.resx b/src/Client/Resources/Pages/Catalog/AddEditProductModal.fr.resx new file mode 100644 index 0000000..4ba8a22 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditProductModal.fr.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ajouter un produit + + + Code barre + + + Marque + + + Annuler + + + Supprimer + + + Description + + + Identifiant + + + Nom + + + Produit enregistré ! + + + Produit mis à jour ! + + + Note + + + Sauvegarder + + + Mettre à jour + + + Édition d'un produit + + + Téléverser + + + Voir + + diff --git a/src/Client/Resources/Pages/Catalog/AddEditProductModal.id.resx b/src/Client/Resources/Pages/Catalog/AddEditProductModal.id.resx new file mode 100644 index 0000000..770fbfa --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditProductModal.id.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tambah Produk + + + Barcode + + + Merek + + + Batal + + + Hapus + + + Deskripsi + + + Id + + + Nama + + + Produk Tersimpan! + + + Produk Diperbarui! + + + Nilai + + + Simpan + + + Perbarui + + + Perbarui Produk + + + Unggah + + + View + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditProductModal.it.resx b/src/Client/Resources/Pages/Catalog/AddEditProductModal.it.resx new file mode 100644 index 0000000..1d11a75 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditProductModal.it.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aggiungi prodotto + + + Barcode + + + Marca + + + Annulla + + + Elimina + + + Descrizione + + + Id + + + Nome + + + Prodotto Salvato! + + + Prodotto Aggiornato! + + + Vota + + + Salva + + + Aggiorna + + + Aggiorna Prodotto + + + Carica + + + View + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditProductModal.km.resx b/src/Client/Resources/Pages/Catalog/AddEditProductModal.km.resx new file mode 100644 index 0000000..06f7050 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditProductModal.km.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + បន្ថែមផលិតផល + + + បាកូដ + + + ម៉ាក + + + បោះបង់ + + + លុប + + + ការពិពណ៌នា + + + លេខកូដសម្ងាល់ + + + ឈ្មោះ + + + ផលិតផលបានរក្សាទុក + + + ផលិតផលបានធ្វើបច្ចុប្បន្នភាព + + + អត្រា + + + រក្សាទុក + + + បច្ចុប្បន្នភាព + + + ធ្វើបច្ចុប្បន្នភាពផលិតផល + + + ផ្ទុកឡើង + + + បង្ហាញ + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditProductModal.nl.resx b/src/Client/Resources/Pages/Catalog/AddEditProductModal.nl.resx new file mode 100644 index 0000000..f81d047 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditProductModal.nl.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Product toevoegen + + + Barcode + + + Merk + + + Annuleren + + + Verwijderen + + + Beschrijving + + + Id + + + Naam + + + Product opgeslagen! + + + Product bijgewerkt! + + + Verhouding + + + Opslaan + + + Update + + + Product bijwerken + + + Uploaden + + + Bekijken + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditProductModal.ru.resx b/src/Client/Resources/Pages/Catalog/AddEditProductModal.ru.resx new file mode 100644 index 0000000..58dbb12 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditProductModal.ru.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Добавить продукт + + + Баркод + + + Бренд + + + Отмена + + + Удалить + + + Описание + + + Id + + + Наименование + + + Продукт сохранён + + + Продукт обновлён + + + Рейтинг + + + Сохранить + + + Обновить + + + Обновить продукт + + + Загрузить + + + Просмотр + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/AddEditProductModal.sv.resx b/src/Client/Resources/Pages/Catalog/AddEditProductModal.sv.resx new file mode 100644 index 0000000..1882727 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/AddEditProductModal.sv.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Lägg till produkt + + + Streckkod + + + Varumärke + + + Avbryt + + + Radera + + + Beskrivning + + + Id + + + Namn + + + Produkt Sparad! + + + Produkt Uppdaterad! + + + Betygsätt + + + Spara + + + Uppdatera + + + Uppdatera Produkt + + + Ladda upp + + + View + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Brands.ar.resx b/src/Client/Resources/Pages/Catalog/Brands.ar.resx new file mode 100644 index 0000000..45c2a98 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Brands.ar.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أجراءات + + + أضف العلامة التجارية + + + يحدها + + + العلامات التجارية + + + تصدير الماركات + + + إنشاء + + + حذف + + + حذف المحتوى + + + كثيف + + + وصف + + + تعديل + + + تصدير + + + تم تصدير العلامات التجارية المفلترة + + + المعرّف + + + استيراد + + + إدارة العلامات التجارية. + + + اسم + + + لا توجد إجراءات مسموح بها + + + إعادة تحميل + + + ابحث عن العلامات التجارية + + + مخطط + + + ضريبة + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Brands.de.resx b/src/Client/Resources/Pages/Catalog/Brands.de.resx new file mode 100644 index 0000000..88c287c --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Brands.de.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktionen + + + Marke hinzufügen + + + Gerahmt + + + Marken + + + Marken exportiert + + + Hinzufügen + + + Löschen + + + Inhalt löschen + + + Schmal + + + Beschreibung + + + Bearbeiten + + + Exportieren + + + Gefilterte Marken exportiert + + + Id + + + Importieren + + + Marken verwalten. + + + Name + + + Keine Aktionen erlaubt + + + Neu laden + + + Nach Marken suchen + + + Gebändert + + + Steuer + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Brands.en.resx b/src/Client/Resources/Pages/Catalog/Brands.en.resx new file mode 100644 index 0000000..27b237c --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Brands.en.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Add Brand + + + Bordered + + + Brands + + + Brands exported + + + Create + + + Delete + + + Delete Content + + + Dense + + + Description + + + Edit + + + Export + + + Filtered Brands exported + + + Id + + + Import + + + Manage Brands. + + + Name + + + No Allowed Actions + + + Reload + + + Search for Brands + + + Striped + + + Tax + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Brands.es.resx b/src/Client/Resources/Pages/Catalog/Brands.es.resx new file mode 100644 index 0000000..35aebe0 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Brands.es.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acciones + + + Agregar Marca + + + Bordeado + + + Marcas + + + Marcas Exportadas + + + Crear + + + Borrar + + + ¿Desea eliminar el registro? + + + Denso + + + Descripción + + + Editar + + + Exportar + + + Marcas filtradas exportadas + + + Id + + + Importar + + + Gestionar Marcas + + + Nombre + + + Acciones no Permitidas + + + Recargar + + + Buscar Marcas + + + Rayado + + + Impuestos + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Brands.fr.resx b/src/Client/Resources/Pages/Catalog/Brands.fr.resx new file mode 100644 index 0000000..5ccf553 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Brands.fr.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Ajouter un marque + + + Avec bordures + + + Marques + + + Marques exportées + + + Créer + + + Supprimer + + + Supprimer la marque + + + Dense + + + Description + + + Éditer + + + Exporter + + + Marques filtrées exportées + + + Identifiant + + + Importer + + + Gérer les marques + + + Nom + + + Aucune action autorisée + + + Recharger + + + Chercher des marques + + + Rayé + + + Taxe + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Brands.id.resx b/src/Client/Resources/Pages/Catalog/Brands.id.resx new file mode 100644 index 0000000..81a2f01 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Brands.id.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tindakan + + + Tambah Merek + + + Merek + + + Brands exported + + + Tambah + + + Hapus + + + Hapus Konten + + + Deskripsi + + + Sunting + + + Ekspor + + + Filtered Brands exported + + + Id + + + Import + + + Kelola Merek. + + + Nama + + + No Allowed Actions + + + Muat Ulang + + + Cari Merek + + + Pajak + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Brands.it.resx b/src/Client/Resources/Pages/Catalog/Brands.it.resx new file mode 100644 index 0000000..346068b --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Brands.it.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Azioni + + + Aggiungi marca + + + Marche + + + Brands exported + + + Crea + + + Elimina + + + Cancella contenuto + + + Descrizione + + + Modifica + + + Export + + + Filtered Brands exported + + + Id + + + Import + + + Gestione marca. + + + Nome + + + Nessuna azione consentita + + + Ricarica + + + Ricerca marche + + + Imposta + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Brands.km.resx b/src/Client/Resources/Pages/Catalog/Brands.km.resx new file mode 100644 index 0000000..20a35b7 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Brands.km.resx @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + មុខងារ + + + បន្ថែមម៉ាក + + + ម៉ាក + + + ម៉ាកបាននាំចេញ + + + បង្កើត + + + លុប + + + ការពិពណ៌នា + + + កែប្រែ + + + នាំចេញ + + + ច្រោះម៉ាកបាននាំចេញ + + + លេខកូដសម្ងាល់ + + + Import + + + គ្រប់គ្រងម៉ាក + + + ឈ្មោះ + + + មិនមានសិទ្ធិ + + + ផ្ទុកឡើងវិញ + + + ស្វែងរកម៉ាក + + + ពន្ធ + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Brands.nl.resx b/src/Client/Resources/Pages/Catalog/Brands.nl.resx new file mode 100644 index 0000000..d3e5aec --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Brands.nl.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acties + + + Merk toevoegen + + + Grenst aan + + + Merken + + + Geëxporteerde merken + + + Aanmaken + + + Verwijderen + + + Inhoud verwijderen + + + Dicht + + + Beschrijving + + + Bewerken + + + Exporteren + + + Gefilterde merken geëxporteerd + + + Id + + + Importeren + + + Beheer merken. + + + Naam + + + Geen toegestane acties + + + Herladen + + + Zoeken naar merken + + + Gestreept + + + Belasting + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Brands.ru.resx b/src/Client/Resources/Pages/Catalog/Brands.ru.resx new file mode 100644 index 0000000..1c34c46 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Brands.ru.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Действия + + + Добавить бренд + + + Обрамлённый + + + Бренды + + + Бренды экспортированы + + + Создать + + + Удалить + + + Удалить контент + + + Компактный + + + Описание + + + Редактировать + + + Экспорт в Excel + + + Отфильтрованные бренды экспортированы + + + Id + + + Импорт + + + Управление брендами. + + + Наименование + + + Нет доступных действий + + + Перезагрузить + + + Поиск брендов... + + + Чередующийся + + + Сбор + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Brands.sv.resx b/src/Client/Resources/Pages/Catalog/Brands.sv.resx new file mode 100644 index 0000000..934d8d1 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Brands.sv.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Åtgärder + + + Lägg till varumärke + + + Varumärken + + + Brands exported + + + Skapa + + + Radera + + + Ta bort innehåll + + + Beskrivning + + + Redigera + + + Exportera + + + Filtered Brands exported + + + Id + + + Import + + + Hantera varumärken. + + + Namn + + + No Allowed Actions + + + Ladda om + + + Sök efter varumärken + + + Moms + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Products.ar.resx b/src/Client/Resources/Pages/Catalog/Products.ar.resx new file mode 100644 index 0000000..e84ef69 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Products.ar.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أجراءات + + + الشفره + + + يحدها + + + ماركة + + + إنشاء + + + حذف + + + حذف المحتوى + + + كثيف + + + وصف + + + تعديل + + + تصدير + + + تصدير المنتجات المفلترة + + + المعرّف + + + إدارة المنتجات. + + + اسم + + + لا توجد إجراءات مسموح بها + + + منتجات + + + تصدير المنتجات + + + تقييم + + + إعادة تحميل + + + بحث + + + مخطط + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Products.de.resx b/src/Client/Resources/Pages/Catalog/Products.de.resx new file mode 100644 index 0000000..d3ab068 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Products.de.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktionen + + + Strichcode + + + Gerahmt + + + Marke + + + Hinzufügen + + + Löschen + + + Inhalt löschen + + + Schmal + + + Beschreibung + + + Bearbeiten + + + Exportieren + + + Gefilterte Produkte exportiert + + + Id + + + Produkte verwalten + + + Maximale Bewertung + + + Minimale Bewertung + + + Name + + + Keine Aktionen erlaubt + + + Produkte + + + Produkte exportiert + + + Bewertung + + + Neu laden + + + Suchen + + + Gebändert + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Products.en.resx b/src/Client/Resources/Pages/Catalog/Products.en.resx new file mode 100644 index 0000000..1c633ca --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Products.en.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Barcode + + + Bordered + + + Brand + + + Create + + + Delete + + + Delete Content + + + Dense + + + Description + + + Edit + + + Export + + + Filtered Products exported + + + Id + + + Manage Products. + + + Maximum Rate + + + Minimum Rate + + + Name + + + No Allowed Actions + + + Products + + + Products exported + + + Rate + + + Reload + + + Search + + + Striped + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Products.es.resx b/src/Client/Resources/Pages/Catalog/Products.es.resx new file mode 100644 index 0000000..3da508d --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Products.es.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acciones + + + Código de barra + + + Bordeado + + + Marca + + + Crear + + + Borrar + + + ¿Desea eliminar el registro? + + + Denso + + + Descripción + + + Editar + + + Exportar + + + Productos filtrados exportados + + + Id + + + Gestionar Productos + + + Nombre + + + Acciones no Permitidas + + + Productos + + + Productos exportados + + + Precio + + + Recargar + + + Buscar + + + Rayado + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Products.fr.resx b/src/Client/Resources/Pages/Catalog/Products.fr.resx new file mode 100644 index 0000000..ebf66a8 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Products.fr.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Code barre + + + Avec bordures + + + Marque + + + Créer + + + Supprimer + + + Supprimer le produit + + + Dense + + + Description + + + Éditer + + + Exporter + + + Produits filtrés exportés + + + Identifiant + + + Gérer les produits. + + + Nom + + + Aucune action autorisée + + + Produits + + + Products exported + + + Note + + + Recharger + + + Chercher + + + Rayé + + diff --git a/src/Client/Resources/Pages/Catalog/Products.id.resx b/src/Client/Resources/Pages/Catalog/Products.id.resx new file mode 100644 index 0000000..15d8d77 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Products.id.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tindakan + + + Barcode + + + Merek + + + Tambah + + + Hapus + + + Hapus Konten + + + Deskripsi + + + Sunting + + + Ekspor + + + Filtered Products exported + + + Id + + + Kelola Produk. + + + Nama + + + No Allowed Actions + + + Produk + + + Products exported + + + Nilai + + + Muat Ulang + + + Cari + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Products.it.resx b/src/Client/Resources/Pages/Catalog/Products.it.resx new file mode 100644 index 0000000..a218fa3 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Products.it.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Azioni + + + Descrizione + + + Id + + + Nome + + + Prodotti + + + Ricarica + + + Marca + + + Cancella contenuto + + + Ricerca + + + Tasso + + + Gestione prodotti. + + + Modifica + + + Elimina + + + Crea + + + Barcode + + + Prodotti esportati + + + Prodotti filtrati esportati + + + Nessuna azione consentita + + + Tasso massimo + + + Tasso minimo + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Products.km.resx b/src/Client/Resources/Pages/Catalog/Products.km.resx new file mode 100644 index 0000000..6cbf00d --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Products.km.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + មុខងារ + + + បាកូដ + + + បង្កើត + + + លុប + + + ការពិពណ៌នា + + + កែប្រែ + + + ច្រោះផលិតផលបាននាំចេញ + + + លេខកូដសម្ងាល់ + + + គ្រប់គ្រងផលិតផល + + + ឈ្មោះ + + + គ្មានសិទ្ធិ + + + ផលិតផល + + + ផលិតផលនាំចេញ + + + អត្រា + + + ផ្ទុកឡើងវិញ + + + ស្វែងរក + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Products.nl.resx b/src/Client/Resources/Pages/Catalog/Products.nl.resx new file mode 100644 index 0000000..cc4ced9 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Products.nl.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acties + + + Barcode + + + Aanmaken + + + Verwijderen + + + Beschrijving + + + Bewerken + + + Gefilterde producten geëxporteerd + + + Id + + + Producten beheren. + + + Naam + + + Geen toegestane acties + + + Producten + + + Uitgevoerde producten + + + Verhouding + + + Herladen + + + Zoeken + + + Grenst aan + + + Merk + + + Inhoud verwijderen + + + Dicht + + + Exporteren + + + Gestreept + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Products.ru.resx b/src/Client/Resources/Pages/Catalog/Products.ru.resx new file mode 100644 index 0000000..b2ae187 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Products.ru.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Действия + + + Баркод + + + Обрамлённый + + + Бренд + + + Создать + + + Удалить + + + Удалить контент + + + Компактный + + + Описание + + + Редактировать + + + Экспорт в Excel + + + Отфильтрованные продукты экспортированы + + + Id + + + Управление продуктами. + + + Наименование + + + Нет доступных действий + + + Продукты + + + Продукты экспортированы + + + Рейтинг + + + Перезагрузить + + + Поиск продуктов... + + + Чередующийся + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Catalog/Products.sv.resx b/src/Client/Resources/Pages/Catalog/Products.sv.resx new file mode 100644 index 0000000..43994b0 --- /dev/null +++ b/src/Client/Resources/Pages/Catalog/Products.sv.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Åtgärder + + + Streckkod + + + Varumärke + + + Skapa + + + Radera + + + Ta bort innehåll + + + Beskrivning + + + Redigera + + + Exportera + + + Filtered Products exported + + + Id + + + Hantera Produkter. + + + Namn + + + No Allowed Actions + + + Produkter + + + Products exported + + + Betygsätta + + + Ladda om + + + Sök + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Communication/Chat.ar.resx b/src/Client/Resources/Pages/Communication/Chat.ar.resx new file mode 100644 index 0000000..6637bd9 --- /dev/null +++ b/src/Client/Resources/Pages/Communication/Chat.ar.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + دردشة + + + جهات الاتصال + + + دليل مفصل للمزيد. + + + أدخل رسالتك... + + + مسجّل الدخول. + + + تسجيل الخروج. + + + رسالة جديدة من {0} + + + يرسل + + + هل تريد أن تفهم كيف يتم تنفيذ الدردشة في BlazorHero؟ قم بإحالة هذا + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Communication/Chat.de.resx b/src/Client/Resources/Pages/Communication/Chat.de.resx new file mode 100644 index 0000000..0555b5b --- /dev/null +++ b/src/Client/Resources/Pages/Communication/Chat.de.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Chat + + + Kontakte + + + Detaillierte Anleitung für mehr. + + + Gibt deine Nachricht ein... + + + Eingeloggt. + + + Ausgeloggt. + + + Neue Nachricht von {0} + + + Absenden + + + Du möchtest verstehen, wie der Chat in FullStackHero implementiert ist? Lies hier + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Communication/Chat.en.resx b/src/Client/Resources/Pages/Communication/Chat.en.resx new file mode 100644 index 0000000..7b318d4 --- /dev/null +++ b/src/Client/Resources/Pages/Communication/Chat.en.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + chat + + + contacts + + + detailed guide for more. + + + Enter your message... + + + Logged In. + + + Logged Out. + + + New Message From {0} + + + Send + + + Want to understand how Chat is implemented in BlazorHero ? Refer this + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Communication/Chat.es.resx b/src/Client/Resources/Pages/Communication/Chat.es.resx new file mode 100644 index 0000000..702f3f7 --- /dev/null +++ b/src/Client/Resources/Pages/Communication/Chat.es.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + chat + + + contactos + + + guía detallada para mas. + + + Ingrese su mensaje... + + + Contectado. + + + Desconectado. + + + Nuevo mensaje de {0} + + + Enviar + + + ¿Quiere entender como el Chat está implmentado en BlazorHero? Mirar esta referencia + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Communication/Chat.fr.resx b/src/Client/Resources/Pages/Communication/Chat.fr.resx new file mode 100644 index 0000000..9b67e0b --- /dev/null +++ b/src/Client/Resources/Pages/Communication/Chat.fr.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Conversations + + + Contacts + + + guide détaillé pour en savoir plus. + + + Entrez votre message. + + + Connecté. + + + Déconnecté. + + + Nouveau message de {0} + + + Envoyer + + + Vous voulez comprendre comment le chat est implémenté dans BlazorHero ? Jettez un œil à ce + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Communication/Chat.id.resx b/src/Client/Resources/Pages/Communication/Chat.id.resx new file mode 100644 index 0000000..a9e65c4 --- /dev/null +++ b/src/Client/Resources/Pages/Communication/Chat.id.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + obrolan + + + kontak + + + panduan rinci lebih lanjut. + + + Tulis pesan anda... + + + Logged In. + + + Logged Out. + + + New Message From {0} + + + Kirim + + + Ingin tau bagaimana cara obrolan diimplementasi di BlazorHero ? Lihat + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Communication/Chat.it.resx b/src/Client/Resources/Pages/Communication/Chat.it.resx new file mode 100644 index 0000000..534c625 --- /dev/null +++ b/src/Client/Resources/Pages/Communication/Chat.it.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + chat + + + contatti + + + guida dettagliata per saperne di più. + + + Inserisci il tuo messaggio ... + + + Logged In. + + + Logged Out. + + + New Message From {0} + + + Invia + + + Vuoi capire come viene implementata la chat in BlazorHero? Guarda qui + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Communication/Chat.km.resx b/src/Client/Resources/Pages/Communication/Chat.km.resx new file mode 100644 index 0000000..f492f0a --- /dev/null +++ b/src/Client/Resources/Pages/Communication/Chat.km.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ជជែក + + + ឈ្មោះទំនាក់ទំនង + + + ការណែនាំលំអិត + + + វាយបញ្ចូលសាររបស់អ្នក + + + ឡុកចូល។ + + + ឡុកចេញ។ + + + សារថ្មីមកពី {0} + + + ផ្ញើ + + + ចង់ដឹងអំពីរបៀបសរសេរកូដមុខងារជជែកក្នុងប្លេហ្សឺហេរ៉ូ ចូលទៅកាន់តំណភ្ជាប់នេះ + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Communication/Chat.nl.resx b/src/Client/Resources/Pages/Communication/Chat.nl.resx new file mode 100644 index 0000000..7b2a08f --- /dev/null +++ b/src/Client/Resources/Pages/Communication/Chat.nl.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Gesprek + + + Contactpersonen + + + gedetailleerde gids voor meer. + + + Voer uw bericht in... + + + Ingelogd. + + + Uitgelogd. + + + Nieuw bericht van {0} + + + Verzenden + + + Wilt u begrijpen hoe een Chat wordt geïmplementeerd in BlazorHero ? Ga dan naar deze + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Communication/Chat.ru.resx b/src/Client/Resources/Pages/Communication/Chat.ru.resx new file mode 100644 index 0000000..e2e8a9e --- /dev/null +++ b/src/Client/Resources/Pages/Communication/Chat.ru.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + чат + + + контакты + + + подробному руководству для получения дополнительной информации. + + + Введите ваше сообщение... + + + авторизовался. + + + вышел. + + + Новое сообщение от {0} + + + Отправить + + + Хотите понять, как реализован чат в BlazorHero ? Обратитесь к этому + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Communication/Chat.sv.resx b/src/Client/Resources/Pages/Communication/Chat.sv.resx new file mode 100644 index 0000000..0fa02a8 --- /dev/null +++ b/src/Client/Resources/Pages/Communication/Chat.sv.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + chatt + + + kontakter + + + detaljerad guide för mer. + + + Ditt meddelande... + + + Logged In. + + + Logged Out. + + + New Message From {0} + + + Skicka + + + Vill du förstå hur Chatt implementeras i BlazorHero? Se detta + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Home.ar.resx b/src/Client/Resources/Pages/Content/Home.ar.resx new file mode 100644 index 0000000..06018d1 --- /dev/null +++ b/src/Client/Resources/Pages/Content/Home.ar.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + بليزر للمبتدئين - بدء استخدام بليزر + + + Blazor Hero عبارة عن نموذج للحل الشامل للهندسة المعمارية النظيفة لتجميع الويب Blazor الذي تم إنشاؤه باستخدام + + + بناء تطبيق دردشة مع Blazor ، Identity ، و SignalR + + + الاحتفال بـ 1500 نجمة على جيثب! + + + مكتبة المكونات + + + المصادقة المخصصة في Blazor WebAssembly - بالتفصيل + + + قالب معماري نظيف لـ Blazor Web-Assembly + + + التوثيق - قريبا + + + استكشاف هيكل مشروع Blazor + + + ابدء + + + مستودع جيثب: لا تنسى ترك نجم ؛) + + + إليك بعض المقالات التي من المفترض أن تساعدك في البدء باستخدام Blazor. + + + كيفية تنفيذ Blazor CRUD باستخدام Entity Framework Core؟ + + + تنفيذ Blazor CRUD باستخدام مكتبة مكونات Mudblazor في .NET 5 + + + روابط مهمة + + + في حال كنت عالقًا في أي مكان أو كان لديك أي استفسارات بخصوص هذا التنفيذ ، فقد قمت بتجميع دليل البدء السريع للرجوع إليه + + + مصادر التعلم + + + أحب BlazorHero؟ نجمة لنا على جيثب! + + + هندسة البصل في ASP.NET Core مع CQRS - مفصل + + + صفحة المشروع + + + دليل البدء السريع + + + اقرأ الدليل + + + ادعمني! + + + بلازور هيرو + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Home.de.resx b/src/Client/Resources/Pages/Content/Home.de.resx new file mode 100644 index 0000000..64fdfeb --- /dev/null +++ b/src/Client/Resources/Pages/Content/Home.de.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor für Anfänger - Erste Schritte in Blazor + + + Blazor Hero ist ein All-In-One Clean Architecture Lösungstemplate für Blazor Web-Assembly, erstellt mit + + + Baue eine Chat-Anwendung With Blazor, Identity, And SignalR + + + Wir feiern 1,500 Sterne auf Github! + + + Komponentenbibliothek + + + Benutzerdefinierte Authentifizierung in Blazor WebAssembly im Detail + + + Clean Architecture Vorlage für Blazor Web-Assembly + + + Dokumentation - demnächst + + + Erforsche die Blazor Projektstruktur + + + Erste Schritte + + + Github Repository : Vergiss nicht, einen Stern zu hinterlassen ;) + + + Hier sind ein paar Artikel, die dir beimn Einstieg in Blazor helfen sollten. + + + Wie implementierst du Blazor CRUD mit Entity Framework Core? + + + Implementiere Blazor CRUD mit der Mudblazor Komponentenbibliothek in .NET 5 + + + Wichtige Verknüpfungen + + + Falls du irgendwo steckenbleiben solltest, oder Fragen zu dieser Implementierung hast, habe ich eine Schnellstartanleitung für dich erstellt. + + + Lernmittel + + + Dir gefällt BlazorHero? Hinterlasse einen Stern auf Github! + + + Zwiebelarchitektur in ASP.NET Core mit CQRS im Detail + + + Projektseite + + + Schnellstartanleitung + + + Lies die Anleitung + + + Unterstütze mich! + + + Blazor Hero + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Home.en.resx b/src/Client/Resources/Pages/Content/Home.en.resx new file mode 100644 index 0000000..1d1c273 --- /dev/null +++ b/src/Client/Resources/Pages/Content/Home.en.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor For Beginners – Getting Started With Blazor + + + Blazor Hero is an All-In-One Clean Architecture Solution Template For Blazor Web-Assembly built with + + + Building A Chat Application With Blazor, Identity, And SignalR + + + Celebrating 1,500 Stars on Github! + + + Component Library + + + Custom Authentication In Blazor WebAssembly – Detailed + + + Clean Architecture Template For Blazor Web-Assembly + + + Documentation - Coming Soon + + + Exploring Blazor Project Structure + + + Getting Started + + + Github Repository : Do Not Forget to Leave a Star ;) + + + Here are few articles that should help you get started with Blazor. + + + How To Implement Blazor CRUD Using Entity Framework Core? + + + Implementing Blazor CRUD Using Mudblazor Component Library In .NET 5 + + + Important Links + + + In case you are stuck anywhere or have any queries regarding this implementation, I have compiled a Quick Start Guide for you reference. + + + Learning Resources + + + Liked BlazorHero? Star us on Github! + + + Onion Architecture In ASP.NET Core With CQRS – Detailed + + + Project Page + + + Quick Start Guide + + + Read The Guide + + + Support Me! + + + Blazor Hero + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Home.es.resx b/src/Client/Resources/Pages/Content/Home.es.resx new file mode 100644 index 0000000..f5e12b4 --- /dev/null +++ b/src/Client/Resources/Pages/Content/Home.es.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor para Principiantes – Iniciarse con Blazor + + + Blazor Hero es un template de Solución de Arquitectura todo-en-uno para Blazor Web-Assembly, hecho con la Librería de Componentes + + + Construir una Aplicación de Chat con Blazor, Identity y SignalR + + + Celebrando 1,500 Estrellas en Github! + + + + + + Autenticación Personalizada en Blazor WebAssembly – Detallado + + + Template de Arquitectura Limpia para Blazor Web-Assembly + + + Documentación - Pronto + + + Explorando la estructura de un Proyecto Blazor + + + Iniciarse + + + Repositorio en Github: No olvides dejar una estrella ;) + + + Aquí hay unos artículos que te ayudarán a iniciarte el Blazor. + + + ¿Cómo implementar un CRUD en Blazro usando Entity Framework Core? + + + Implementando un CRUD en Blazor usando la librería de componentes Mudblazor en .NET 5 + + + Links Importantes + + + En caso que tengas problemas para avanzar o tengas preguntas sobre la implementación, he compilado una Guía de Inicio Rápido para tu referencia. + + + Recursos para Aprendizaje + + + ¿Te gustó BlazorHero? Deja una estrella en Github! + + + Arquitectura Onion en ASP.NET Core con CQRS – Detalle + + + Página del proyecto + + + Guía de Inicio Rápido + + + Lee la guía + + + Apoyarme! + + + Blazor Hero + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Home.fr.resx b/src/Client/Resources/Pages/Content/Home.fr.resx new file mode 100644 index 0000000..0024b82 --- /dev/null +++ b/src/Client/Resources/Pages/Content/Home.fr.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor For Beginners – Getting Started With Blazor + + + Blazor Hero est un modèle de solution propre et tout en un pour Blazor Web-Assembly, construit avec la bibliothèque de composants + + + Building A Chat Application With Blazor, Identity, And SignalR + + + Celebrating 1,500 Stars on Github! + + + + + + Custom Authentication In Blazor WebAssembly – Detailed + + + Modèle d'architecture propre pour Blasor Web-Assembly + + + Documentation - Coming Soon + + + Exploring Blazor Project Structure + + + Getting Started + + + Github Repository : Do Not Forget to Leave a Star ;) + + + Here are few articles that should help you get started with Blazor. + + + How To Implement Blazor CRUD Using Entity Framework Core? + + + Implementing Blazor CRUD Using Mudblazor Component Library In .NET 5 + + + Important Links + + + In case you are stuck anywhere or have any queries regarding this implementation, I have compiled a Quick Start Guide for you reference. + + + Learning Resources + + + Liked BlazorHero? Star us on Github! + + + Onion Architecture In ASP.NET Core With CQRS – Detailed + + + Project Page + + + Quick Start Guide + + + Read The Guide + + + Support Me! + + + Blazor Hero + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Home.id.resx b/src/Client/Resources/Pages/Content/Home.id.resx new file mode 100644 index 0000000..32c38ef --- /dev/null +++ b/src/Client/Resources/Pages/Content/Home.id.resx @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor For Beginners – Getting Started With Blazor + + + Blazor Hero adalah sebuah Template Solusi Clean Architecture All-In-One Untuk Blazor Web-Assembly + + + Blazor Hero is an All-In-One Clean Architecture Solution Template For Blazor Web-Assembly built with + + + Building A Chat Application With Blazor, Identity, And SignalR + + + Celebrating 1,500 Stars on Github! + + + Pustaka Komponen + + + Component Library + + + Custom Authentication In Blazor WebAssembly – Detailed + + + Template Clean Architecture Untuk Blazor Web-Assembly + + + Documentation - Coming Soon + + + Exploring Blazor Project Structure + + + Getting Started + + + Github Repository : Do Not Forget to Leave a Star ;) + + + Here are few articles that should help you get started with Blazor. + + + How To Implement Blazor CRUD Using Entity Framework Core? + + + Implementing Blazor CRUD Using Mudblazor Component Library In .NET 5 + + + Important Links + + + In case you are stuck anywhere or have any queries regarding this implementation, I have compiled a Quick Start Guide for you reference. + + + Learning Resources + + + Liked BlazorHero? Star us on Github! + + + Onion Architecture In ASP.NET Core With CQRS – Detailed + + + Halaman Proyek + + + Quick Start Guide + + + Read The Guide + + + Dukung Saya! + + + Blazor Hero + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Home.it.resx b/src/Client/Resources/Pages/Content/Home.it.resx new file mode 100644 index 0000000..e004f55 --- /dev/null +++ b/src/Client/Resources/Pages/Content/Home.it.resx @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Descrizione + + + Blazor Hero + + + Libreria di compoenti + + + Supportami! + + + Blazor Hero + + + Blazor For Beginners – Getting Started With Blazor + + + Blazor Hero is an All-In-One Clean Architecture Solution Template For Blazor Web-Assembly built with + + + Building A Chat Application With Blazor, Identity, And SignalR + + + Celebrating 1,500 Stars on Github! + + + Component Library + + + Custom Authentication In Blazor WebAssembly – Detailed + + + Exploring Blazor Project Structure + + + Getting Started + + + Github Repository : Do Not Forget to Leave a Star ;) + + + Here are few articles that should help you get started with Blazor. + + + How To Implement Blazor CRUD Using Entity Framework Core? + + + Implementing Blazor CRUD Using Mudblazor Component Library In .NET 5 + + + Important Links + + + In case you are stuck anywhere or have any queries regarding this implementation, I have compiled a Quick Start Guide for you reference. + + + Learning Resources + + + Liked BlazorHero? Star us on Github! + + + Onion Architecture In ASP.NET Core With CQRS – Detailed + + + Quick Start Guide + + + Read The Guide + + + Documentation - Coming Soon + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Home.km.resx b/src/Client/Resources/Pages/Content/Home.km.resx new file mode 100644 index 0000000..7fccc0b --- /dev/null +++ b/src/Client/Resources/Pages/Content/Home.km.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ប្លេហ្សឺសម្រាប់ការចាប់ផ្តើម - ចាំផ្តើមជាមួយប្លេហ្សឺ + + + Blazor Hero is an All-In-One Clean Architecture Solution Template For Blazor Web-Assembly built with + + + Building A Chat Application With Blazor, Identity, And SignalR + + + Celebrating 1,500 Stars on Github! + + + Component Library + + + Custom Authentication In Blazor WebAssembly – Detailed + + + គំរូកម្មវិធីដែលអភិវឌ្ឍតាមបច្ចេកវិទ្យា Blazor Web-Assembly + + + ឯកសារណែនាំលម្អិត មកដល់ឆាប់ៗនេះ + + + គ្រោងថតរបស់គម្រោង + + + ចាប់ផ្តើម + + + Github Repository : Do Not Forget to Leave a Star ;) + + + Here are few articles that should help you get started with Blazor. + + + How To Implement Blazor CRUD Using Entity Framework Core? + + + Implementing Blazor CRUD Using Mudblazor Component Library In .NET 5 + + + Important Links + + + In case you are stuck anywhere or have any queries regarding this implementation, I have compiled a Quick Start Guide for you reference. + + + ធនធានសិក្សា + + + Liked BlazorHero? Star us on Github! + + + Onion Architecture In ASP.NET Core With CQRS – Detailed + + + ទំព័រគម្រោង + + + ការណែនាំសង្ខេប + + + អានការណែនា + + + គាំទ្រយើងខ្ញុំ! + + + ប្លេហ្សឺ ហេរ៉ូ + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Home.nl.resx b/src/Client/Resources/Pages/Content/Home.nl.resx new file mode 100644 index 0000000..6ec8ae5 --- /dev/null +++ b/src/Client/Resources/Pages/Content/Home.nl.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor voor beginners – Aan de slag met Blazor + + + Blazor Hero is een alles-in-één schone architectuuroplossing sjabloon voor Blazor web-assembly gebouwd met + + + Een chattoepassing bouwen met Blazor, Identity en SignalR + + + Inmiddels 1500 sterren op Github! + + + Componentbibliotheek + + + Aangepaste verificatie in Blazor WebAssembly - Gedetailleerd + + + Schone architectuursjabloon voor Blazor Web-Assembly + + + Documentatie - Binnenkort beschikbaar + + + Blazor-projectstructuur verkennen + + + Opstarten + + + Github Repository : Vergeet niet om een ster achter te laten ;) + + + Hier zijn enkele artikelen die u moeten helpen aan de slag te gaan met Blazor. + + + Hoe Blazor CRUD implementeren met Entity Framework Core? + + + Blazor CRUD implementeren met mudblazor-componentbibliotheek in .NET 5 + + + Belangrijke links + + + Verhoog dat u ergens vastzit of heb vragen over deze implementatie, ik heb een Quick Start Guide voor u samengesteld. + + + Leermiddelen + + + Vind je BlazorHero leuk? Geef een ster op Github! + + + Onion Architecture In ASP.NET Core Met CQRS – Gedetailleerd + + + Projectpagina + + + Snelstartgids + + + Lees de gids + + + Steun mij! + + + Blazor Held + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Home.ru.resx b/src/Client/Resources/Pages/Content/Home.ru.resx new file mode 100644 index 0000000..c1d6b11 --- /dev/null +++ b/src/Client/Resources/Pages/Content/Home.ru.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor For Beginners – Getting Started With Blazor + + + Blazor Hero - это All-In-One шаблон решения с применением "чистой" архитектуры для Blazor Web-Assembly, построенный с помощью + + + Building A Chat Application With Blazor, Identity, And SignalR + + + Достигнуто 1,500 Звёзд на Github! + + + библиотеки компонентов + + + Custom Authentication In Blazor WebAssembly – Detailed + + + Шаблон "чистой" архитектуры для Blazor Web-Assembly + + + Документация - скоро появится + + + Exploring Blazor Project Structure + + + Начало работы + + + Репозиторий Github : не забудьте поставить звезду ;) + + + Вот несколько статей, которые должны помочь вам начать работу с Blazor. + + + How To Implement Blazor CRUD Using Entity Framework Core? + + + Implementing Blazor CRUD Using Mudblazor Component Library In .NET 5 + + + Важные ссылки + + + Если вы где-то застряли или у вас есть какие-либо вопросы относительно этой реализации, я составил для вас краткое руководство по началу работы. + + + Учебные ресурсы + + + Нравится BlazorHero? Поставьте звезду на Github! + + + Onion Architecture In ASP.NET Core With CQRS – Detailed + + + Страница проекта + + + Краткое руководство по началу работы + + + Прочитать руководство + + + Поддержать меня! + + + Blazor Hero + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Home.sv.resx b/src/Client/Resources/Pages/Content/Home.sv.resx new file mode 100644 index 0000000..a9bcdcc --- /dev/null +++ b/src/Client/Resources/Pages/Content/Home.sv.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor för nybörjare - Komma igång med Blazor + + + Blazor Hero är en allt-i-ett-ren mall för arkitekturlösningar för Blazor Web-Assembly byggd med + + + Bygga en Chattapplikation med Blazor, Identity och SignalR + + + Celebrating 1,500 Stars on Github! + + + Komponentbibliotek + + + Anpassad autentisering i Blazor WebAssembly - Detaljerad + + + Ren arkitekturmall för Blazor Web-Assembly + + + Documentation - Coming Soon + + + Utforska Blazor-projektets struktur + + + Komma igång + + + Github Repository : Glöm inte att lämna en stjärna ;) + + + Här är några artiklar som kan hjälpa dig att komma igång med Blazor. + + + Hur implementerar jag Blazor CRUD med Entity Framework Core? + + + Implementering av Blazor CRUD med Mudblazor Komponent Library i .NET 5 + + + Viktiga länkar + + + Öka att du har fastnat någonstans eller har några frågor angående denna implementering, jag har sammanställt en snabbstartsguide som referens. + + + Lärande resurser + + + Liked BlazorHero? Star us on Github! + + + Onion Architecture In ASP.NET Core With CQRS – Detaljerad + + + Projektsida + + + Snabbstartsguide + + + Läs guiden + + + Stöd Mig! + + + Blazor Hero + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Resources.ar.resx b/src/Client/Resources/Pages/Content/Resources.ar.resx new file mode 100644 index 0000000..4f13a27 --- /dev/null +++ b/src/Client/Resources/Pages/Content/Resources.ar.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + الوصول إلى الموارد هنا. + + + رهيبة بليزر + + + مكان رائع للتعلم والعثور على معلومات ومشاريع / أمثلة حول Blazor. + + + موارد + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Resources.de.resx b/src/Client/Resources/Pages/Content/Resources.de.resx new file mode 100644 index 0000000..9000594 --- /dev/null +++ b/src/Client/Resources/Pages/Content/Resources.de.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Auf Ressourcen zugreifen. + + + Awesome Blazor + + + Großartige Seite zum Lernen von Blazor. Es gibt eine Vielzahl an Informationen, Projekten und Beispielen. + + + Ressourcen + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Resources.en.resx b/src/Client/Resources/Pages/Content/Resources.en.resx new file mode 100644 index 0000000..4254cab --- /dev/null +++ b/src/Client/Resources/Pages/Content/Resources.en.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Access Resources here. + + + Awesome Blazor + + + Great place to learn, find information and projects/examples about Blazor. + + + Resources + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Resources.es.resx b/src/Client/Resources/Pages/Content/Resources.es.resx new file mode 100644 index 0000000..0f6b656 --- /dev/null +++ b/src/Client/Resources/Pages/Content/Resources.es.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acceder a los recursos aquí + + + Awesome Blazor + + + Estupendo lugar para aprender, buscar información y proyectos/ejemplos sobre Blazor. + + + Recursos + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Resources.fr.resx b/src/Client/Resources/Pages/Content/Resources.fr.resx new file mode 100644 index 0000000..fdccea8 --- /dev/null +++ b/src/Client/Resources/Pages/Content/Resources.fr.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Accédez aux ressouces ici. + + + Awesome Blazor + + + Bon endroit pour apprendre, trouver des informations et des projets / exemples avec Blazor. + + + Ressources + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Resources.id.resx b/src/Client/Resources/Pages/Content/Resources.id.resx new file mode 100644 index 0000000..5233f41 --- /dev/null +++ b/src/Client/Resources/Pages/Content/Resources.id.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Akses Resources di sini. + + + Awesome Blazor + + + Tempat yang bagus untuk belajar, mencari informasi dan proyek/contoh tentang Blazor. + + + Resources + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Resources.it.resx b/src/Client/Resources/Pages/Content/Resources.it.resx new file mode 100644 index 0000000..2d8f2f6 --- /dev/null +++ b/src/Client/Resources/Pages/Content/Resources.it.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Risorse + + + Ottimo posto per imparare, trovare informazioni e progetti/esempi su Blazor. + + + Eccezionale Blazor + + + Accedi alle risorse qui. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Resources.km.resx b/src/Client/Resources/Pages/Content/Resources.km.resx new file mode 100644 index 0000000..fe1c3c3 --- /dev/null +++ b/src/Client/Resources/Pages/Content/Resources.km.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ចូលប្រើធនធាននៅទីនេះ + + + ធនធានប្លេហ្សឺមហាសាល + + + កន្លែងដ៏ល្អដើម្បីរៀនស្វែងរកព័ត៌មាននិងគម្រោង / ឧទាហរណ៍គំរូរបស់ប្លេហ្សឺ + + + ធនធាន + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Resources.nl.resx b/src/Client/Resources/Pages/Content/Resources.nl.resx new file mode 100644 index 0000000..a6e54ef --- /dev/null +++ b/src/Client/Resources/Pages/Content/Resources.nl.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Hier kunt u bronnen openen. + + + Geweldige Blazor + + + Geweldige plek om te leren, informatie en projecten / voorbeelden over Blazor te vinden. + + + Bronnen + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Resources.ru.resx b/src/Client/Resources/Pages/Content/Resources.ru.resx new file mode 100644 index 0000000..c69e400 --- /dev/null +++ b/src/Client/Resources/Pages/Content/Resources.ru.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Доступ к ресурсам здесь. + + + Awesome Blazor + + + Отличное место для обучения, где можно найти информацию и проекты/примеры о Blazor. + + + Ресурсы + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Content/Resources.sv.resx b/src/Client/Resources/Pages/Content/Resources.sv.resx new file mode 100644 index 0000000..163625f --- /dev/null +++ b/src/Client/Resources/Pages/Content/Resources.sv.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Få tillgång till resurser här. + + + Fantastisk Blazor + + + Bra ställe att lära sig, hitta information och projekt / exempel om Blazor. + + + Resurser + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Account.ar.resx b/src/Client/Resources/Pages/Identity/Account/Account.ar.resx new file mode 100644 index 0000000..a1e51f2 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Account.ar.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + الحساب + + + إدارة حسابك + + + الملف الشخصي + + + حماية + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Account.de.resx b/src/Client/Resources/Pages/Identity/Account/Account.de.resx new file mode 100644 index 0000000..a309580 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Account.de.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Konto + + + Konto verwalten + + + Profil + + + Sicherheit + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Account.en.resx b/src/Client/Resources/Pages/Identity/Account/Account.en.resx new file mode 100644 index 0000000..8153dbd --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Account.en.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Account + + + Manage your account + + + Profile + + + Security + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Account.es.resx b/src/Client/Resources/Pages/Identity/Account/Account.es.resx new file mode 100644 index 0000000..d838676 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Account.es.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cuenta + + + Gestione su cuenta + + + Perfil + + + Seguridad + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Account.fr.resx b/src/Client/Resources/Pages/Identity/Account/Account.fr.resx new file mode 100644 index 0000000..3ff7ab8 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Account.fr.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Compte + + + Gérez votre compte + + + Profile + + + Sécurité + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Account.id.resx b/src/Client/Resources/Pages/Identity/Account/Account.id.resx new file mode 100644 index 0000000..7ee6bd2 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Account.id.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Akun + + + Kelola akun anda + + + Profil + + + Keamanan + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Account.it.resx b/src/Client/Resources/Pages/Identity/Account/Account.it.resx new file mode 100644 index 0000000..d4c0346 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Account.it.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Account + + + Gestisci il tuo account + + + Profilo + + + Sicurezza + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Account.km.resx b/src/Client/Resources/Pages/Identity/Account/Account.km.resx new file mode 100644 index 0000000..d3e124c --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Account.km.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + គណនី + + + គ្រប់គ្រង​គណនី​របស់​អ្នក + + + ប្រវត្តិរូប + + + សន្តិសុខ + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Account.nl.resx b/src/Client/Resources/Pages/Identity/Account/Account.nl.resx new file mode 100644 index 0000000..4e3d049 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Account.nl.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Account + + + Uw account beheren + + + Profiel + + + Beveiliging + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Account.ru.resx b/src/Client/Resources/Pages/Identity/Account/Account.ru.resx new file mode 100644 index 0000000..5344d37 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Account.ru.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Аккаунт + + + Управление вашим аккаунтом + + + Профиль + + + Безопасность + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Account.sv.resx b/src/Client/Resources/Pages/Identity/Account/Account.sv.resx new file mode 100644 index 0000000..2bfbf5c --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Account.sv.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Konto + + + Hantera ditt konto + + + Profil + + + Säkerhet + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Profile.ar.resx b/src/Client/Resources/Pages/Identity/Account/Profile.ar.resx new file mode 100644 index 0000000..549b9dc --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Profile.ar.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + حذف صورة + + + حذف الصورة + + + هل تريد حذف صورة ملف تعريف {0} + + + بريد الالكتروني + + + الاسم الأول + + + الكنية + + + رقم الهاتف + + + الملف الشخصي + + + تفاصيل الملف الشخصي + + + تمت إضافة صورة الملف الشخصي. + + + تم حذف صورة الملف الشخصي. + + + حفظ التغييرات + + + تحميل الصور + + + تم تحديث ملفك الشخصي. الرجاء تسجيل الدخول للمتابعة. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Profile.de.resx b/src/Client/Resources/Pages/Identity/Account/Profile.de.resx new file mode 100644 index 0000000..badb9b7 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Profile.de.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bild löschen + + + Bild löschen + + + Möchtest du das Profilbild von {0} löschen + + + E-Mail + + + Vorname + + + Nachname + + + Telefon + + + Profil + + + Profildetails + + + Profilbild hinzugefügt. + + + Profilbild gelöscht. + + + Änderungen speichern + + + Bild hochladen + + + Profil aktualisiert. Zum Fortfahren anmelden. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Profile.en.resx b/src/Client/Resources/Pages/Identity/Account/Profile.en.resx new file mode 100644 index 0000000..708594b --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Profile.en.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Delete Image + + + Delete Picture + + + Do you want to delete the profile picture of {0} + + + Email + + + First Name + + + Last Name + + + Phone Number + + + Profile + + + Profile Details + + + Profile picture added. + + + Profile picture deleted. + + + Save Changes + + + Upload Image + + + Your Profile has been updated. Please Login to Continue. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Profile.es.resx b/src/Client/Resources/Pages/Identity/Account/Profile.es.resx new file mode 100644 index 0000000..add91bb --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Profile.es.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Borrar Imagen + + + Borrar Imagen + + + ¿Quiere borrar la imagen de perfil de {0} + + + Correo + + + Nombre + + + Apellido + + + Teléfono + + + Perfil + + + Detalle del perfil + + + Imagen de Perfil agregada. + + + Imagen de Perfil borrada. + + + Guardar cambios + + + Cargar Imagen + + + Tu perfil fue actualizado, por favor ingrese para continuar. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Profile.fr.resx b/src/Client/Resources/Pages/Identity/Account/Profile.fr.resx new file mode 100644 index 0000000..9dd3d5c --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Profile.fr.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Supprimer image + + + Supprimer photo + + + Voulez-vous supprimer la photo de profil de {0} + + + Courriel + + + Prénom + + + Nom + + + Numéro de téléphone + + + Profil + + + Détails du profil + + + Photo de profil ajouté. + + + Photo de profil supprimée. + + + Sauvagarder les changements + + + Téléverser une image + + + Votre profil a été mis à jour. Merci de vous reconnecter pour continuer. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Profile.id.resx b/src/Client/Resources/Pages/Identity/Account/Profile.id.resx new file mode 100644 index 0000000..238596e --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Profile.id.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Hapus Gambar + + + Hapus Gambar + + + Do you want to delete the profile picture of {0} + + + Email + + + Nama Depan + + + Nama Belakang + + + Nomor Telepon + + + Profil + + + Detail Profil + + + Profile picture added. + + + Profile picture deleted. + + + Simpan Perubahan + + + Unggah Gambar + + + Profil Anda telah diperbarui. Login untuk Melanjutkan. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Profile.it.resx b/src/Client/Resources/Pages/Identity/Account/Profile.it.resx new file mode 100644 index 0000000..3848468 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Profile.it.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Elimina Immagine + + + Elimina Immagine + + + Do you want to delete the profile picture of {0} + + + Email + + + Nome + + + Cognome + + + Telefono + + + Profilo + + + Dettagli profilo + + + Profile picture added. + + + Profile picture deleted. + + + Salvare le modifiche + + + Carica immagine + + + Il tuo profilo è stato aggiornato. Accedere per continuare. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Profile.km.resx b/src/Client/Resources/Pages/Identity/Account/Profile.km.resx new file mode 100644 index 0000000..56fd8a9 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Profile.km.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + លុបរូបភាព + + + លុបរូបភាព + + + តើអ្នកចង់លុបរូបថតប្រូហ្វាល់នៃ {0} + + + អ៊ីមែល + + + នាមខ្លួន + + + នាមត្រកូល + + + លេខទូរស័ព្ទ + + + ប្រវត្តិរូប + + + ព័ត៌មានលម្អិតប្រវត្តិរូប + + + រូបថតប្រូហ្វាល់បានបន្ថែម + + + រូបថតប្រូហ្វាល់បានលុប + + + រក្សាទុកការផ្លាស់ប្តូរ + + + ផ្ទុកឡើងរូបភាព + + + ពត៌មានរបស់អ្នកត្រូវបានធ្វើបច្ចុប្បន្នភាព។ សូមចូលដើម្បីបន្ត។ + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Profile.nl.resx b/src/Client/Resources/Pages/Identity/Account/Profile.nl.resx new file mode 100644 index 0000000..faba084 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Profile.nl.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Afbeelding verwijderen + + + Wilt u de profielfoto van {0} verwijderen? + + + Email + + + Voornaam + + + Achternaam + + + Telefoonnummer + + + Profiel + + + Profielgegevens + + + Profielfoto toegevoegd. + + + Profielfoto verwijderd. + + + Wijzigingen opslaan + + + Uw profiel is bijgewerkt. Log in om door te gaan. + + + Afbeelding verwijderen + + + Afbeelding uploaden + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Profile.ru.resx b/src/Client/Resources/Pages/Identity/Account/Profile.ru.resx new file mode 100644 index 0000000..c08082a --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Profile.ru.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Удалить изображение + + + Вы действительно хотите удалить изображение профиля {0} + + + Email + + + Имя + + + Фамилия + + + Номер телефона + + + Профиль + + + Детали профиля + + + Изображение профиля добавлено. + + + Изображение профиля удалено. + + + Сохранить изменения + + + Загрузить изображение + + + Ваш профиль был обновлён. Пожалуйста, авторизуйтесь, чтобы продолжить. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Profile.sv.resx b/src/Client/Resources/Pages/Identity/Account/Profile.sv.resx new file mode 100644 index 0000000..48cf3c5 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Profile.sv.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Radera Bild + + + Radera Bild + + + Do you want to delete the profile picture of {0} + + + E-post + + + Förnamn + + + Efternamn + + + Telefonnummer + + + Profil + + + Profil Detaljer + + + Profile picture added. + + + Profile picture deleted. + + + Spara Ändringar + + + Ladda upp bild + + + Din profil har uppdaterats. Var vänlig logga in för att fortsätta. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Security.ar.resx b/src/Client/Resources/Pages/Identity/Account/Security.ar.resx new file mode 100644 index 0000000..8e0d14b --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Security.ar.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + تغيير كلمة المرور + + + كلمة المرور الحالي + + + كلمة سر خاطئة. + + + كلمه السر + + + تم تغيير كلمة السر! + + + تأكيد كلمة المرور + + + مطلوب تأكيد كلمة المرور! + + + كلمة المرور مطلوبة! + + + يجب ألا يقل طول كلمة المرور عن 8 + + + يجب أن تحتوي كلمة المرور على حرف كبير واحد على الأقل + + + يجب أن تحتوي كلمة المرور على رقم واحد على الأقل + + + يجب أن تحتوي كلمة المرور على حرف صغير واحد على الأقل + + + كلمات المرور غير متطابقة + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Security.de.resx b/src/Client/Resources/Pages/Identity/Account/Security.de.resx new file mode 100644 index 0000000..593ce75 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Security.de.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Passwort ändern + + + Aktuelles Passwort + + + Falsches Passwort. + + + Passwort + + + Passwort geändert! + + + Passwortwiederholung + + + Passwortwiederholung wird benötigt! + + + Passwort wird benötigt! + + + Passwort muss mindestens 8 Zeichen lang sein + + + Passwort muss mindestens einen Großbuchstaben enthalten + + + Passwort muss mindestens eine Zahl enthalten + + + Passwort muss mindestens einen Kleinbuchstaben enthalten + + + Passwörter stimmen nicht überein. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Security.en.resx b/src/Client/Resources/Pages/Identity/Account/Security.en.resx new file mode 100644 index 0000000..9de3a3e --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Security.en.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Change Password + + + Current Password + + + Incorrect Password. + + + Password + + + Password Changed! + + + Password Confirmation + + + Password Confirmation is required! + + + Password is required! + + + Password must be at least of length 8 + + + Password must contain at least one capital letter + + + Password must contain at least one digit + + + Password must contain at least one lowercase letter + + + Passwords don't match + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Security.es.resx b/src/Client/Resources/Pages/Identity/Account/Security.es.resx new file mode 100644 index 0000000..998fab6 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Security.es.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cambiar contraseña + + + Contraseña actual + + + Contraseña + + + Confirmación de contraseña + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Security.fr.resx b/src/Client/Resources/Pages/Identity/Account/Security.fr.resx new file mode 100644 index 0000000..b98c7ae --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Security.fr.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Changer le mot de passe + + + Mot de passe actuel + + + Mot de passe incorrect. + + + Mot de passe + + + Mot de passe changé ! + + + Mot de passe confirmé ! + + + Confirmation du mot de passe requise ! + + + Mot de passe requis ! + + + Le mot de passe doit au moins contenir 8 caractères ! + + + Le mot de passe doit au moins contenir une lettre majuscule + + + Le mot de passe doit au moins contenir un chiffre + + + Le mot de passe doit au moins contenir une minuscule + + + Les mots de passes de correspondent pas + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Security.id.resx b/src/Client/Resources/Pages/Identity/Account/Security.id.resx new file mode 100644 index 0000000..6f68328 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Security.id.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ubah sandi + + + Sandi saat Ini + + + Sandi salah. + + + Sandi + + + Sandi diperbarui! + + + Konfirmasi sandi + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Security.it.resx b/src/Client/Resources/Pages/Identity/Account/Security.it.resx new file mode 100644 index 0000000..787c422 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Security.it.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cambia password + + + Password corrente + + + Password non corretta. + + + Password + + + Password cambiata! + + + Conferma password + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Security.km.resx b/src/Client/Resources/Pages/Identity/Account/Security.km.resx new file mode 100644 index 0000000..9f41488 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Security.km.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ផ្លាស់ប្តូរពាក្យសម្ងាត់ + + + លេខសំងាត់​បច្ចុប្បន្ន + + + ពាក្យសម្ងាត់ + + + ការ​បញ្ជាក់​ពាក្យ​សម្ងាត់ + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Security.nl.resx b/src/Client/Resources/Pages/Identity/Account/Security.nl.resx new file mode 100644 index 0000000..54116f3 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Security.nl.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Wachtwoord wijzigen + + + Huidig wachtwoord + + + Wachtwoord + + + Wachtwoordbevestiging + + + Onjuist wachtwoord. + + + Wachtwoord gewijzigd! + + + Lösenordsbekräftelse krävs! + + + Wachtwoord is vereist! + + + Wachtwoord moet uit minimaal 8 karakters bestaan! + + + Wachtwoord moet uit minimaal 1 hoofdletter bestaan! + + + Wachtwoord moet uit minimaal 1 nummer! + + + Wachtwoord moet uit minimaal 1 kleine letter! + + + Wachtwoorden komen niet overeen! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Security.ru.resx b/src/Client/Resources/Pages/Identity/Account/Security.ru.resx new file mode 100644 index 0000000..6240d95 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Security.ru.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Изменить пароль + + + Текущий пароль + + + Неверный пароль. + + + Пароль + + + Пароль изменён! + + + Подтверждение пароля + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Account/Security.sv.resx b/src/Client/Resources/Pages/Identity/Account/Security.sv.resx new file mode 100644 index 0000000..1fa3c42 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Account/Security.sv.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ändra lösenord + + + Nuvarande lösenord + + + Fel lösenord. + + + Lösenord + + + Lösenord Ändrat! + + + Lösenordsbekräftelse + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RegisterUserModal.ar.resx b/src/Client/Resources/Pages/Identity/RegisterUserModal.ar.resx new file mode 100644 index 0000000..aa9eed6 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RegisterUserModal.ar.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + المستخدم نشط؟ + + + هل تريد تأكيد البريد الإلكتروني تلقائيًا؟ + + + إلغاء + + + تأكيد كلمة المرور + + + بريد الالكتروني + + + الاسم الأول + + + الكنية + + + كلمه السر + + + رقم الهاتف + + + الملف الشخصي + + + تفاصيل الملف الشخصي + + + تسجيل + + + تسجيل المستخدم + + + حفظ التغييرات + + + اسم االمستخدم + + + مستخدم مسجل! + + + مستخدم مسجل. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RegisterUserModal.de.resx b/src/Client/Resources/Pages/Identity/RegisterUserModal.de.resx new file mode 100644 index 0000000..06149d5 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RegisterUserModal.de.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Benutzer aktivieren? + + + E-Mail automatisch bestätigen? + + + Abbrechen + + + Passwort wiederholen + + + E-Mail + + + Vorname + + + Nachname + + + Passwort + + + Telefon + + + Profil + + + Profildetails + + + Registrieren + + + Benutzer registrieren + + + Änderungen speichern + + + Benutzername + + + Benutzer registriert! + + + Benutzer registriert. Eine Bestätigungsemail wurde an die angegebene E-Mail-Adresse versendet. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RegisterUserModal.en.resx b/src/Client/Resources/Pages/Identity/RegisterUserModal.en.resx new file mode 100644 index 0000000..02e1e86 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RegisterUserModal.en.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Activate User? + + + Auto Confirm Email? + + + Cancel + + + Confirm Password + + + Email + + + First Name + + + Last Name + + + Password + + + Phone Number + + + Profile + + + Profile Details + + + Register + + + Register User + + + Save Changes + + + User Name + + + User Registered! + + + User Registered. Confirmation Mail has been delivered to the Mailbox. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RegisterUserModal.es.resx b/src/Client/Resources/Pages/Identity/RegisterUserModal.es.resx new file mode 100644 index 0000000..ff8e8ee --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RegisterUserModal.es.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ¿Activar usuario? + + + ¿Autoconfirmar correo? + + + Cancelar + + + Confirmar contraseña + + + Correo + + + Nombre + + + Apellido + + + Contraseña + + + Teléfono + + + Perfil + + + Detalle del perfil + + + Registrar + + + Usuario registrado + + + Guardar cambios + + + Usuario + + + Usuario Registrado! + + + Usuario Registrado. Un correo de confirmación fue enviado a su casilla de correo. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RegisterUserModal.fr.resx b/src/Client/Resources/Pages/Identity/RegisterUserModal.fr.resx new file mode 100644 index 0000000..3c2d06a --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RegisterUserModal.fr.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Utilisateur actif ? + + + Confirmer automatiquement le courriel ? + + + Annuler + + + Confirmer le mot de passe + + + Courriel + + + Prénom + + + Nom + + + Mot de passe + + + Numéro de téléphone + + + Profil + + + Détails du profil + + + Inscrire + + + Inscrire l'utilisateur + + + Sauvegarder les changements. + + + Nom d'utilisateur + + + Utilisateur enregistré. + + + Utilisateur enregistré. Un courriel de confirmation a lui été envoyé. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RegisterUserModal.id.resx b/src/Client/Resources/Pages/Identity/RegisterUserModal.id.resx new file mode 100644 index 0000000..b26268a --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RegisterUserModal.id.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktifkan Pengguna? + + + Konfirmasi Email Otomatis? + + + Batal + + + Konfirmasi Sandi + + + Email + + + Nama Depan + + + Nama Belakang + + + Sandi + + + Nomor Telepon + + + Profil + + + Detail Profil + + + Daftar + + + Daftar Pengguna + + + Simpan Perubahan + + + User Name + + + Pengguna Terdaftar! + + + Pengguna Terdaftar. Email konfirmasi telah dikirim ke email Anda. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RegisterUserModal.it.resx b/src/Client/Resources/Pages/Identity/RegisterUserModal.it.resx new file mode 100644 index 0000000..2999209 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RegisterUserModal.it.resx @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Auto conferma E-Mail? + + + Annulla + + + Conferma password + + + Email + + + Nome + + + Cognome + + + Password + + + Telefono + + + Profilo + + + Dettagli profilo + + + Registrati + + + Registra utente + + + Salvare le modifiche + + + Nome utente + + + Utente registrato! + + + Utente registrato. Una mail di conferma è stata inviata alla vostra casella E-Mail. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RegisterUserModal.km.resx b/src/Client/Resources/Pages/Identity/RegisterUserModal.km.resx new file mode 100644 index 0000000..821eb89 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RegisterUserModal.km.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ធ្វើឱ្យអ្នកប្រើប្រាស់សកម្ម? + + + បញ្ជាក់អ៊ីមែលដោយស្វ័យប្រវត្តិ? + + + បោះបង់ + + + បញ្ជាក់ពាក្យសម្ងាត់ + + + អ៊ីមែល + + + នាមខ្លួន + + + នាមត្រកូល + + + ពាក្យសម្ងាត់ + + + លេខទូរស័ព្ទ + + + ប្រវត្តិរូប + + + ប្រវត្តិរូបលម្អិត + + + ចុះឈ្មោះ + + + ចុះឈ្មោះអ្នកប្រើប្រាស់ + + + រក្សាការកែប្រែ + + + ឈ្មោះអ្នកប្រើប្រាស់ + + + អ្នកប្រើប្រាស់ត្រូវបានចុះឈ្មោះរួចរាល់ + + + អ្នកប្រើប្រាស់ត្រូវបានចុះឈ្មោះរួចរាល់ សារអ៊ីម៉ែលបញ្ជាក់នឹងត្រូវផ្ញើទៅកាន់ប្រអប់សាររបស់អ្នក! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RegisterUserModal.nl.resx b/src/Client/Resources/Pages/Identity/RegisterUserModal.nl.resx new file mode 100644 index 0000000..39a5449 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RegisterUserModal.nl.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Gebruiker activeren? + + + E-mail automatisch bevestigen? + + + Annuleren + + + Wachtwoord bevestigen + + + Email + + + Voornaam + + + Achternaam + + + Wachtwoord + + + Telefoonnummer + + + Profiel + + + Profielgegevens + + + Registreren + + + Gebruiker registreren + + + Wijzigingen opslaan + + + Gebruikersnaam + + + Gebruiker geregistreerd! + + + Geregistreerde gebruiker. Bevestigingsmail is afgeleverd bij de mailbox. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RegisterUserModal.ru.resx b/src/Client/Resources/Pages/Identity/RegisterUserModal.ru.resx new file mode 100644 index 0000000..15c69df --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RegisterUserModal.ru.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Активировать пользователя? + + + Подтвердить email автоматически? + + + Отмена + + + Подтверждение пароля + + + Email + + + Имя + + + Фамилия + + + Пароль + + + Номер телефона + + + Профиль + + + Детали профиля + + + Зарегистрировать + + + Регистрация пользователя + + + Сохранить изменения + + + Username + + + Пользователь зарегистрирован + + + Пользователь зарегистрирован. Письмо для подтверждения будет отправлено по почте. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RegisterUserModal.sv.resx b/src/Client/Resources/Pages/Identity/RegisterUserModal.sv.resx new file mode 100644 index 0000000..949f8d8 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RegisterUserModal.sv.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktivera användare? + + + Bekräfta e-post automatiskt? + + + Avbryt + + + Bekräfta lösenord + + + E-post + + + Förnamn + + + Efternamn + + + Lösenord + + + Telefonnummer + + + Profil + + + Profil Detaljer + + + Registrera + + + Registrera användare + + + Spara ändringar + + + Användarnamn + + + Användare Registrerad! + + + Användare registrerad. Bekräftelsemeddelande har skickats till brevlådan. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Reset.ar.resx b/src/Client/Resources/Pages/Identity/Reset.ar.resx new file mode 100644 index 0000000..cfc5c47 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Reset.ar.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + تأكيد كلمة المرور + + + بريد الالكتروني + + + أدخل البريد الإلكتروني لإعادة تعيين كلمة المرور + + + كلمه السر + + + إعادة تعيين كلمة المرور + + + لم يتم العثور على الرمز! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Reset.de.resx b/src/Client/Resources/Pages/Identity/Reset.de.resx new file mode 100644 index 0000000..00eb773 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Reset.de.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Passwort bestätigen + + + E-Mail + + + E-Mail-Adresse eingeben um, das Passwort zurückzusetzen + + + Passwort + + + Passwort zurücksetzen + + + Token nicht gefunden! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Reset.en.resx b/src/Client/Resources/Pages/Identity/Reset.en.resx new file mode 100644 index 0000000..4e4a724 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Reset.en.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Confirm Password + + + E-mail + + + Enter email for password reset + + + Password + + + Reset password + + + Token Not Found! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Reset.es.resx b/src/Client/Resources/Pages/Identity/Reset.es.resx new file mode 100644 index 0000000..cf79b0c --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Reset.es.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Confirmar Contraseña + + + Correo + + + Ingrese correo para blanquear contraseña + + + Contraseña + + + Blanquear Contraseña + + + Token no encontrado! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Reset.fr.resx b/src/Client/Resources/Pages/Identity/Reset.fr.resx new file mode 100644 index 0000000..a38eed5 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Reset.fr.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Confirmer le mot de passe + + + Courriel + + + Entrez le courriel pour la réinitialisation du mot de passe + + + Mot de passe + + + Réinitialiser le mot de passe + + + Jeton introuvable ! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Reset.id.resx b/src/Client/Resources/Pages/Identity/Reset.id.resx new file mode 100644 index 0000000..4e4a724 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Reset.id.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Confirm Password + + + E-mail + + + Enter email for password reset + + + Password + + + Reset password + + + Token Not Found! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Reset.it.resx b/src/Client/Resources/Pages/Identity/Reset.it.resx new file mode 100644 index 0000000..4e4a724 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Reset.it.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Confirm Password + + + E-mail + + + Enter email for password reset + + + Password + + + Reset password + + + Token Not Found! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Reset.km.resx b/src/Client/Resources/Pages/Identity/Reset.km.resx new file mode 100644 index 0000000..895f21c --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Reset.km.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + លេខកូដសម្ងាត់បញ្ជាក់ + + + អ៊ីំម៉ែល + + + បញ្ចូលអ៊ីម៉ែលដើម្បីកំណត់លេខកូដសម្ងាត់ឡើងវិញ + + + លេខកូដសម្ងាត់ + + + កំណត់លេខកូដសម្ងាត់ឡើងវិញ + + + ធូឃីនរកមិនឃើញ! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Reset.nl.resx b/src/Client/Resources/Pages/Identity/Reset.nl.resx new file mode 100644 index 0000000..d1617f7 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Reset.nl.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Wachtwoord bevestigen + + + E-mail + + + Voer uw E-mail in voor het opnieuw instellen van het wachtwoord! + + + Wachtwoord + + + Wachtwoord opnieuw instellen + + + Token niet gevonden! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Reset.ru.resx b/src/Client/Resources/Pages/Identity/Reset.ru.resx new file mode 100644 index 0000000..47208bc --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Reset.ru.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Подтверждение пароля + + + E-mail + + + Введите email для сброса ппароля + + + Пароль + + + Сбросить пароль + + + Токен не найден! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Reset.sv.resx b/src/Client/Resources/Pages/Identity/Reset.sv.resx new file mode 100644 index 0000000..4e4a724 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Reset.sv.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Confirm Password + + + E-mail + + + Enter email for password reset + + + Password + + + Reset password + + + Token Not Found! + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RoleModal.ar.resx b/src/Client/Resources/Pages/Identity/RoleModal.ar.resx new file mode 100644 index 0000000..ea2c146 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RoleModal.ar.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أضف دورًا + + + إلغاء + + + وصف + + + معرف الدور + + + اسم الدور + + + حفظ الدور + + + تحديث الدور + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RoleModal.de.resx b/src/Client/Resources/Pages/Identity/RoleModal.de.resx new file mode 100644 index 0000000..3ad22b6 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RoleModal.de.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Rolle hinzufügen + + + Abbrechen + + + Beschreibung + + + Rollen ID + + + Rollenname + + + Rolle speichern + + + Rolle aktualisieren + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RoleModal.en.resx b/src/Client/Resources/Pages/Identity/RoleModal.en.resx new file mode 100644 index 0000000..a9dfc58 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RoleModal.en.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Role + + + Cancel + + + Description + + + Role ID + + + Role Name + + + Save Role + + + Update Role + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RoleModal.es.resx b/src/Client/Resources/Pages/Identity/RoleModal.es.resx new file mode 100644 index 0000000..059eae4 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RoleModal.es.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Agregar Rol + + + Cancelar + + + Descripción + + + ID de Rol + + + Nombre de Rol + + + Guardar + + + Actualizar + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RoleModal.fr.resx b/src/Client/Resources/Pages/Identity/RoleModal.fr.resx new file mode 100644 index 0000000..88f6a63 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RoleModal.fr.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ajouter un rôle + + + Annuler + + + Description + + + Identifiant du rôle + + + Nom du rôle + + + Sauvegarder le rôle + + + Mettre à jour le rôle + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RoleModal.id.resx b/src/Client/Resources/Pages/Identity/RoleModal.id.resx new file mode 100644 index 0000000..ba2c181 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RoleModal.id.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tambah Wewenang + + + Batal + + + Description + + + Wewenang berhasil dibuat! + + + ID Wewenang + + + Nama Wewenang + + + Simpan Wewenang + + + Perbarui Wewenang + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RoleModal.it.resx b/src/Client/Resources/Pages/Identity/RoleModal.it.resx new file mode 100644 index 0000000..eba449c --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RoleModal.it.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Attivare l'utente? + + + Annulla + + + Description + + + Id ruolo + + + Nome ruolo + + + Salvare ruolo + + + Aggiorna ruolo + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RoleModal.km.resx b/src/Client/Resources/Pages/Identity/RoleModal.km.resx new file mode 100644 index 0000000..eaa3005 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RoleModal.km.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + បន្ថែមតួនាទី + + + បោះបង់ + + + ពិពណ៌នា + + + លេខសម្គាល់តួនាទី + + + ឈ្មោះតួនាទី + + + រក្សាទុកតួនាទី + + + ធ្វើបច្ចុប្បន្នភាពតួនាទី + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RoleModal.nl.resx b/src/Client/Resources/Pages/Identity/RoleModal.nl.resx new file mode 100644 index 0000000..26ddbae --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RoleModal.nl.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Rol toevoegen + + + Annuleren + + + Beschrijving + + + Rol-ID + + + Rolnaam + + + Rol opslaan + + + Rol bijwerken + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RoleModal.ru.resx b/src/Client/Resources/Pages/Identity/RoleModal.ru.resx new file mode 100644 index 0000000..a66eebf --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RoleModal.ru.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Добавить роль + + + Отмена + + + Описание + + + ID роли + + + Имя роли + + + Сохранить роль + + + Обновить роль + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/RoleModal.sv.resx b/src/Client/Resources/Pages/Identity/RoleModal.sv.resx new file mode 100644 index 0000000..d01cb2e --- /dev/null +++ b/src/Client/Resources/Pages/Identity/RoleModal.sv.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Lägg till roll + + + Avbryt + + + Description + + + Roll ID + + + Roll Namn + + + Spara Roll + + + Uppdatera Roll + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/RolePermissions.ar.resx b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.ar.resx new file mode 100644 index 0000000..d40cc37 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.ar.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + كل الأذونات + + + تطبيق + + + يحدها + + + كثيف + + + وصف + + + هنا يمكنك ترك تعليق لهذا الإذن للدور الحالي + + + إدارة الإذن + + + إدارة أذونات {0} {1} + + + اسم الإذن + + + ابحث عن أذونات + + + حالة + + + مخطط + + + نوع + + + تحديث أذونات الدور + + + سيتم حفظها فقط عند تحديد الإذن + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/RolePermissions.de.resx b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.de.resx new file mode 100644 index 0000000..bc9a1e6 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.de.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Alle Berechtigungen + + + Anwenden + + + Gerahmt + + + Schmal + + + Beschreibung + + + Hier kann ein Kommentar für diese Berechtigung der aktuellen Rolle hinterlassen werden + + + Berechtigungen verwalten + + + Verwalte {0} Berechtigungen von {1} + + + Berechtigungsname + + + Nach Berechtigungen suchen + + + Status + + + Gebändert + + + Typ + + + Rollenberechtigungen verwalten + + + Wird nur gespeichert wenn Berechtigung ausgewählt + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/RolePermissions.en.resx b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.en.resx new file mode 100644 index 0000000..83f81ed --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.en.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + All Permissions + + + Apply + + + Bordered + + + Dense + + + Description + + + Here you can leave a comment for this permission for the current role + + + Manage Permission + + + Manage {0} {1}'s Permissions + + + Permission Name + + + Search For Permissions + + + Status + + + Striped + + + Type + + + Update Role Permissions + + + Will be saved only when selected Permission + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/RolePermissions.es.resx b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.es.resx new file mode 100644 index 0000000..358154c --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.es.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Todos los Permisos + + + Aplicar + + + Bordeado + + + Denso + + + Descripción + + + Aquí puede dejar un comentario para este permiso para el rol actual + + + Administrar Permisos + + + Administrar los permisos de {0} {1} + + + Nombre del Permiso + + + Buscar Permisos + + + Estado + + + Rayado + + + Tipo + + + Actualizar los Permisos del Rol + + + Será guardado únicamente cuando se seleccione Permisos + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/RolePermissions.fr.resx b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.fr.resx new file mode 100644 index 0000000..8b5380b --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.fr.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Toutes les permissions + + + Appliquer + + + Avec bordures + + + Dense + + + Description + + + Vous pouvez laisser ici un commentaire pour expliquer la permission de ce rôle. + + + Gérer la permission + + + Gérer les permissions du rôle {0} {1} + + + Nom de la permission + + + Rechercher une permission + + + Statut + + + Rayé + + + Type + + + Mettre à jour les permissions du rôle + + + Va être sauvegardé seulement si la permission est sélectionnée + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/RolePermissions.id.resx b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.id.resx new file mode 100644 index 0000000..6698c6a --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.id.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + All Permissions + + + Apply + + + Description + + + Here you can leave a comment for this permission for the current role + + + Pengaturan Izin + + + Pengaturan {0} {1} Izin + + + Nama Wewenang + + + Status + + + Tipe + + + Perbarui Izin Wewenang + + + Will be saved only when selected Permission + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/RolePermissions.it.resx b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.it.resx new file mode 100644 index 0000000..56b3c0d --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.it.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tutti le autorizzazioni + + + Applica + + + Descrizione + + + Qui puoi lasciare un commento per questa autorizzazione per il ruolo corrente + + + Gestisci autorizzazione + + + Gestisci {0} {1} Autorizzazioni + + + Nome autorizzazioni + + + Status + + + Questa è una visualizzazione solo amministratore + + + Salva autorizzazioni + + + Aggiorna le autorizzazioni del ruolo + + + Saranno salvati solo i permessi selezionati + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/RolePermissions.km.resx b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.km.resx new file mode 100644 index 0000000..10fa383 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.km.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + សិទ្ធិទាំងអស់ + + + អនុវត្ត + + + ពិពណ៌នា + + + ទីនេះអ្នកអាចដាក់កំណត់សម្គាល់សិទ្ធិសម្រាប់តួនាទីមួយនេះបាន + + + គ្រង់គ្រងសិទ្ធិ + + + គ្រប់គ្រង {0} {1} សិទ្ធិ + + + ឈ្មោះសិទ្ធិ + + + ស្ថានភាព + + + ប្រភេទ + + + បច្ចុប្បន្នភាពសិទ្ធិរបស់តួនាទី + + + ត្រូវបានរក្សាទុកចំពោះសិទ្ធិដែលបានជ្រើសរើសតែប៉ុណ្ណោះ + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/RolePermissions.nl.resx b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.nl.resx new file mode 100644 index 0000000..ac114dc --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.nl.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Alle machtigingen + + + Toepassen + + + Grenst aan + + + Dicht + + + Beschrijving + + + Hier kunt u een opmerking achterlaten voor deze machtiging voor de huidige rol + + + Machtiging beheren + + + Machtigingen van {0} {1} beheren + + + Naam machtiging + + + Zoeken naar machtigingen + + + Status + + + Gestreept + + + Type + + + Rolmachtigingen bijwerken + + + Wordt alleen opgeslagen wanneer deze optie Is geselecteerd + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/RolePermissions.ru.resx b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.ru.resx new file mode 100644 index 0000000..752fc9c --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.ru.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Все права + + + Применить + + + Обрамлённый + + + Компактный + + + Описание + + + Здесь вы можете оставить комментарий к этому разрешению для текущей роли + + + Управление правами + + + Управление правами {0} {1} + + + Имя права + + + Найти права + + + Статус + + + Чередующийся + + + Тип + + + Обновить права роли + + + Будет сохранено только при выбранном разрешении + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/RolePermissions.sv.resx b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.sv.resx new file mode 100644 index 0000000..f45df6a --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/RolePermissions.sv.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + All Permissions + + + Apply + + + Description + + + Here you can leave a comment for this permission for the current role + + + Hantera Behörighet + + + Hantera {0} {1} Behörigheter + + + Permission Name + + + Status + + + Typ + + + Uppdatera Rollbehörigheter + + + Will be saved only when selected Permission + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/Roles.ar.resx b/src/Client/Resources/Pages/Identity/Roles/Roles.ar.resx new file mode 100644 index 0000000..fd3def1 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/Roles.ar.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أجراءات + + + يحدها + + + إنشاء + + + حذف + + + هل تريد حذف الدور بالمعرف {0}؟ + + + كثيف + + + وصف + + + يحرر + + + المعرف + + + إدارة الإذن + + + إدارة الأدوار. + + + لا توجد إجراءات مسموح بها + + + إعادة تحميل + + + دور + + + الأدوار + + + البحث عن الأدوار ... + + + مخطط + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/Roles.de.resx b/src/Client/Resources/Pages/Identity/Roles/Roles.de.resx new file mode 100644 index 0000000..dab2a04 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/Roles.de.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktionen + + + Gerahmt + + + Hinzufügen + + + Löschen + + + Möchtest du die Rolle mit der Id {0} löschen? + + + Schmal + + + Beschreibung + + + Bearbeiten + + + Id + + + Berechtigungen verwalten + + + Rollen verwalten. + + + Keine Aktionen erlaubt + + + Neu laden + + + Rolle + + + Rollen + + + Nach Rollen suchen... + + + Gebändert + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/Roles.en.resx b/src/Client/Resources/Pages/Identity/Roles/Roles.en.resx new file mode 100644 index 0000000..0fa1138 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/Roles.en.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Bordered + + + Create + + + Delete + + + Do you want to delete the role with Id {0}? + + + Dense + + + Description + + + Edit + + + Id + + + Manage Permission + + + Manage Roles. + + + No Allowed Actions + + + Reload + + + Role + + + Roles + + + Search for Roles... + + + Striped + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/Roles.es.resx b/src/Client/Resources/Pages/Identity/Roles/Roles.es.resx new file mode 100644 index 0000000..1d2ab77 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/Roles.es.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acciones + + + Bordeado + + + Crear + + + Borrar + + + ¿Deseas borrar el rol con el Id {0}? + + + Denso + + + Descripción + + + Editar + + + Id + + + Administrar Permisos + + + Gestionar Roles + + + Acciones no Permitidas + + + Recargar + + + Rol + + + Roles + + + Buscar Roles + + + Rayado + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/Roles.fr.resx b/src/Client/Resources/Pages/Identity/Roles/Roles.fr.resx new file mode 100644 index 0000000..24b39cc --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/Roles.fr.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Avec bordures + + + Créer + + + Supprimer + + + Voulez-vous supprimer le rôle d'identifiant {0}? + + + Dense + + + Description + + + Éditer + + + Identifiant + + + Gérer la permission + + + Gérer les rôles + + + Aucune action autorisée + + + Recharger + + + Rôle + + + Rôles + + + Rechercher des rôles + + + Rayé + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/Roles.id.resx b/src/Client/Resources/Pages/Identity/Roles/Roles.id.resx new file mode 100644 index 0000000..7c09d81 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/Roles.id.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tindakan + + + Tambah + + + Hapus + + + Hapus wewenang dengan Id {0}? + + + Description + + + Sunting + + + Id + + + Atur Perizinan + + + Atur Wewenang. + + + No Allowed Actions + + + Muat Ulang + + + Wewenang + + + Wewenang + + + Cari Wewenang... + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/Roles.it.resx b/src/Client/Resources/Pages/Identity/Roles/Roles.it.resx new file mode 100644 index 0000000..fbd73a3 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/Roles.it.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Azioni + + + Crea + + + Elimina + + + Vuoi eliminare il ruolo con Id {0}? + + + Description + + + Modifica + + + Id + + + Gestisci autorizzazione + + + Gestisci ruoli. + + + No Allowed Actions + + + Ricarica + + + Ruolo + + + Ruoli + + + Ricerca ruoli... + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/Roles.km.resx b/src/Client/Resources/Pages/Identity/Roles/Roles.km.resx new file mode 100644 index 0000000..eca7c51 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/Roles.km.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + មុខងារ + + + បង្កើត + + + លុប + + + តើអ្នកចង់លុបតួនាទីជាមួយលេខសម្គាល់ {0} ទេ? + + + ពិពណ៌នា + + + កែប្រែ + + + លេខកូដ + + + គ្រប់គ្រងតួនាទី + + + សកម្មភាពមិនត្រូវបានអនុញ្ញាត្ត + + + ផ្ទុកឡើងវិញ + + + តួនាទី + + + ស្វែងរកតួនាទី ... + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/Roles.nl.resx b/src/Client/Resources/Pages/Identity/Roles/Roles.nl.resx new file mode 100644 index 0000000..e64ccda --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/Roles.nl.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acties + + + Aanmaken + + + Verwijderen + + + Wilt u de rol verwijderen met Id {0}? + + + Beschrijving + + + Bewerken + + + Id + + + Rollen beheren. + + + Geen toegestane acties + + + Herladen + + + Rollen + + + Rollen zoeken... + + + Grenst aan + + + Dicht + + + Machtiging beheren + + + Rol + + + Gestreept + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/Roles.ru.resx b/src/Client/Resources/Pages/Identity/Roles/Roles.ru.resx new file mode 100644 index 0000000..283844d --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/Roles.ru.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Действия + + + Обрамлённый + + + Создать + + + Удалить + + + Вы действительно хотите удалить роль с Id {0}? + + + Компактный + + + Описание + + + Редактировать + + + Id + + + Управление правами + + + Управление ролями. + + + Нет доступных действий + + + Перезагрузить + + + Роль + + + Роли + + + Поиск ролей... + + + Чередующийся + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Roles/Roles.sv.resx b/src/Client/Resources/Pages/Identity/Roles/Roles.sv.resx new file mode 100644 index 0000000..0b9f79f --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Roles/Roles.sv.resx @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Åtgärder + + + Skapa + + + Radera + + + Vill du ta bort rollen med Id {0}? + + + Description + + + Redigera + + + Id + + + Hantera Behörighet + + + Hantera Roller. + + + No Allowed Actions + + + Ladda Om + + + Roll + + + Roller + + + Sök efter Roll... + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserProfile.ar.resx b/src/Client/Resources/Pages/Identity/Users/UserProfile.ar.resx new file mode 100644 index 0000000..9a71a7f --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserProfile.ar.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + نشيط؟ + + + إعدادات المسؤول. + + + البريد الإلكتروني + + + الاسم الأول + + + الكنية + + + رقم الهاتف + + + الملف الشخصي + + + حساب عام + + + حفظ التغييرات + + + هذا هو العرض المسؤول فقط. + + + تم تحديث حالة المستخدم. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserProfile.de.resx b/src/Client/Resources/Pages/Identity/Users/UserProfile.de.resx new file mode 100644 index 0000000..7ae4716 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserProfile.de.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktiv? + + + Administrator Einstellungen + + + E-Mail + + + Vorname + + + Nachname + + + Telefon + + + Profil + + + Öffentliches Profil + + + Änderungen speichern + + + Diese Ansicht ist nur für den Administrator. + + + Benutzerstatus aktualisiert. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserProfile.en.resx b/src/Client/Resources/Pages/Identity/Users/UserProfile.en.resx new file mode 100644 index 0000000..f98093b --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserProfile.en.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Active? + + + Administrator Settings. + + + E-Mail + + + First Name + + + Last Name + + + Phone Number + + + Profile + + + Public Profile + + + Save Changes + + + This is an Administrator Only View. + + + Updated User Status. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserProfile.es.resx b/src/Client/Resources/Pages/Identity/Users/UserProfile.es.resx new file mode 100644 index 0000000..6acdc56 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserProfile.es.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ¿Activo? + + + Configuraciones de Administrador + + + Correo + + + Nombre + + + Apellido + + + Teléfono + + + Perfil + + + Perfil Público + + + Guardar cambios + + + Esta es una vista solo de Administrador + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserProfile.fr.resx b/src/Client/Resources/Pages/Identity/Users/UserProfile.fr.resx new file mode 100644 index 0000000..4ce1ad8 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserProfile.fr.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actif ? + + + Paramètres pour les administateurs. + + + Courriel + + + Prénom + + + Nom + + + Numéro de téléphone + + + Profil + + + Profil public + + + Sauvegarder les changements + + + Ceci est visible uniquement par les administrateurs. + + + Statut de l'utilisateur mis à jour. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserProfile.id.resx b/src/Client/Resources/Pages/Identity/Users/UserProfile.id.resx new file mode 100644 index 0000000..56bde38 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserProfile.id.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktif? + + + Pengaturan Administrator. + + + E-Mail + + + Nama Depan + + + Nama Belakang + + + Nomor Telepon + + + Profil + + + Profil Publik + + + Simpan Perubahan + + + Ini adalah tampilan khusus Administrator. + + + Perbarui Status Pengguna. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserProfile.it.resx b/src/Client/Resources/Pages/Identity/Users/UserProfile.it.resx new file mode 100644 index 0000000..3bea79d --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserProfile.it.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Attivato ? + + + Impostazioni amministratore. + + + E-Mail + + + Nome + + + Cognome + + + Telefono + + + Profilo + + + Profilo pubblico + + + Salvare le modifiche + + + Questa è una visualizzazione solo amministratore. + + + Aggiorna status utente. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserProfile.km.resx b/src/Client/Resources/Pages/Identity/Users/UserProfile.km.resx new file mode 100644 index 0000000..fb3e505 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserProfile.km.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + សកម្ម? + + + ការកំណត់អ្នកគ្រប់គ្រង + + + អ៊ីមែល + + + នាមខ្លួន + + + នាមត្រកូល + + + លេខទូរស័ព្ទ + + + ប្រវត្តិរូប + + + ប្រវត្តិរូបសាធារណៈ + + + រក្សាទុកការផ្លាស់ប្តូរ + + + ផ្ទាំងសម្រាប់តែអ្នកប្រើប្រាស់មានសិទ្ធិជារដ្ឋបាលប្រព័ន្ធទេ + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserProfile.nl.resx b/src/Client/Resources/Pages/Identity/Users/UserProfile.nl.resx new file mode 100644 index 0000000..17c4cd3 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserProfile.nl.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actief? + + + Beheerdersinstellingen + + + E-mail + + + Voornaam + + + Achternaam + + + Telefoonnummer + + + Profiel + + + Openbaar profiel + + + Wijzigingen opslaan + + + Dit is alleen een weergave voor beheerders. + + + Bijgewerkte gebruikersstatus. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserProfile.ru.resx b/src/Client/Resources/Pages/Identity/Users/UserProfile.ru.resx new file mode 100644 index 0000000..ca0349c --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserProfile.ru.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Активный? + + + Настройки администратора. + + + E-Mail + + + Имя + + + Фамилия + + + Номер телефона + + + Профиль + + + Публичные данные профиля + + + Сохранить изменения + + + Эта стрица доступна только администраторам. + + + Статус пользователя обновлён. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserProfile.sv.resx b/src/Client/Resources/Pages/Identity/Users/UserProfile.sv.resx new file mode 100644 index 0000000..ad47191 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserProfile.sv.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktiv? + + + Administratörsinställningar. + + + E-post + + + Förnamn + + + Efternamn + + + Telefonnummer + + + Profil + + + Offentlig profil + + + Spara ändringar + + + Detta är enbart en administratörsvy. + + + Uppdaterad användarstatus. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserRoles.ar.resx b/src/Client/Resources/Pages/Identity/Users/UserRoles.ar.resx new file mode 100644 index 0000000..74663cc --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserRoles.ar.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bordered + + + Dense + + + Manage {0} {1}'s Roles + + + Role Name + + + Roles Updated! + + + Search For User Roles + + + Status + + + Striped + + + Update User Roles + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserRoles.de.resx b/src/Client/Resources/Pages/Identity/Users/UserRoles.de.resx new file mode 100644 index 0000000..cd38ab3 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserRoles.de.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Gerahmt + + + Schmal + + + Rollen von {0} {1}'s verwalten + + + Rollenname + + + Rollen aktualisiert! + + + Nach Benutzerrollen suchen + + + Status + + + Gebändert + + + Nutzerrolle aktualisieren + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserRoles.en.resx b/src/Client/Resources/Pages/Identity/Users/UserRoles.en.resx new file mode 100644 index 0000000..74663cc --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserRoles.en.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bordered + + + Dense + + + Manage {0} {1}'s Roles + + + Role Name + + + Roles Updated! + + + Search For User Roles + + + Status + + + Striped + + + Update User Roles + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserRoles.es.resx b/src/Client/Resources/Pages/Identity/Users/UserRoles.es.resx new file mode 100644 index 0000000..f4b8b24 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserRoles.es.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bordeado + + + Denso + + + Descripción + + + Administrar Roles de {0} {1} + + + Nombre del Rol + + + Roles actualizados! + + + Buscar por Rol de Usuario + + + Estado + + + Rayado + + + Actualizar Roles de Usuario + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserRoles.fr.resx b/src/Client/Resources/Pages/Identity/Users/UserRoles.fr.resx new file mode 100644 index 0000000..e56749a --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserRoles.fr.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Avec bordures + + + Dense + + + Gérer les rôles de {0} {1} + + + Nom du rôle + + + Rôles mis à jour + + + Rechercher parmis les rôles de l'utilisateur + + + Statut + + + Rayé + + + Mettre à jour les rôles de l'utilisateur + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserRoles.id.resx b/src/Client/Resources/Pages/Identity/Users/UserRoles.id.resx new file mode 100644 index 0000000..5015c9e --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserRoles.id.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Pengaturan {0} {1} Wewenang + + + Nama Wewenang + + + Wewenang Diperbarui! + + + Status + + + Perbarui Wewenang Pengguna + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserRoles.it.resx b/src/Client/Resources/Pages/Identity/Users/UserRoles.it.resx new file mode 100644 index 0000000..ac5b7c0 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserRoles.it.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Manage {0} {1}'s Roles + + + Nome ruolo + + + Ruoli aggiornati! + + + Stato + + + Aggiorna ruoli utente + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserRoles.km.resx b/src/Client/Resources/Pages/Identity/Users/UserRoles.km.resx new file mode 100644 index 0000000..706e0a6 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserRoles.km.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Manage {0} {1}'s Roles + + + ឈ្មោះតួនាទី + + + តួនាទីត្រូវបានធ្វើបច្ចុប្បន្នភាព! + + + ស្ថានភាព + + + បច្ចុប្បន្នភាពតួនាទីរបស់អ្នកប្រើប្រាស់ + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserRoles.nl.resx b/src/Client/Resources/Pages/Identity/Users/UserRoles.nl.resx new file mode 100644 index 0000000..e515e39 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserRoles.nl.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Rollen van {0} {1} beheren + + + Rolnaam + + + Rollen bijgewerkt! + + + Status + + + Gebruikersrollen bijwerken + + + Grenst aan + + + Dicht + + + Zoeken naar gebruikersrollen + + + Gestreept + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserRoles.ru.resx b/src/Client/Resources/Pages/Identity/Users/UserRoles.ru.resx new file mode 100644 index 0000000..a934c03 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserRoles.ru.resx @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Обрамлённый + + + Компактный + + + Управление Ролями {0} {1} + + + Имя роли + + + Роли обновлены! + + + Поиск ролей пользователя + + + Статус + + + Чередующийся + + + Обновить роли пользователя + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/UserRoles.sv.resx b/src/Client/Resources/Pages/Identity/Users/UserRoles.sv.resx new file mode 100644 index 0000000..4963a5f --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/UserRoles.sv.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Hantera {0} {1} Roller + + + Rollnamn + + + Roller uppdaterade! + + + Status + + + Uppdatera användarroller + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/Users.ar.resx b/src/Client/Resources/Pages/Identity/Users/Users.ar.resx new file mode 100644 index 0000000..09b0624 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/Users.ar.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أجراءات + + + نشيط + + + يحدها + + + إنشاء + + + كثيف + + + بريد الالكتروني + + + تأكيد البريد الإلكتروني + + + تصدير + + + تم تصدير المستخدمين الذين تمت تصفيتهم + + + الاسم الأول + + + الكنية + + + إدارة الأدوار + + + ادارة المستخدمين + + + لا توجد إجراءات مسموح بها + + + غير مسموح. + + + رقم الهاتف + + + تسجيل مستخدم جديد + + + إعادة تحميل + + + البحث عن المستخدمين + + + مخطط + + + اسم االمستخدم + + + المستخدمون + + + تصدير المستخدمين + + + عرض الصفحة الشخصية + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/Users.de.resx b/src/Client/Resources/Pages/Identity/Users/Users.de.resx new file mode 100644 index 0000000..48abf2c --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/Users.de.resx @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktionen + + + Aktiv + + + Gerahmt + + + Passwort bestätigen + + + Hinzufügen + + + Schmal + + + E-Mail + + + E-Mail bestätigt + + + Export + + + Gefilterte Benutzer exportiert + + + Vorname + + + Nachname + + + Rollen verwalten + + + Nutzer verwalten + + + Keine Aktionen erlaubt + + + Nicht erlaubt. + + + Passwort + + + Telefonnummer + + + Neuen Nutzer anlegen + + + Neu laden + + + Nach Benutzern suchen + + + Gebändert + + + Benutzername + + + Nutzer + + + Benutzer exportiert + + + Profil anzeigen + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/Users.en.resx b/src/Client/Resources/Pages/Identity/Users/Users.en.resx new file mode 100644 index 0000000..2251438 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/Users.en.resx @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Active + + + Bordered + + + Confirm Password + + + Create + + + Dense + + + Email + + + Email Confirmation + + + Export + + + Filtered Users exported + + + First Name + + + Last Name + + + Manage Roles + + + Manage Users + + + No Allowed Actions + + + Not Allowed. + + + Password + + + Phone Number + + + Register New User + + + Reload + + + Search For Users + + + Striped + + + User Name + + + Users + + + Users exported + + + View Profile + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/Users.es.resx b/src/Client/Resources/Pages/Identity/Users/Users.es.resx new file mode 100644 index 0000000..9a9793a --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/Users.es.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acciones + + + Activo + + + Bordeado + + + Crear + + + Denso + + + Correo + + + Confirmación de correo + + + Exportar + + + Usuarios Filtrados exportados + + + Nombre + + + Apellido + + + Gestionar Roles + + + Gestionar Usuarios + + + Acciones no Permitidas + + + No Permitido + + + Teléfono + + + Nuevo usuario + + + Recargar + + + Buscar usuarios + + + Rayado + + + Nombre de Usuario + + + Usuarios + + + Usuarios exportados + + + Ver perfil + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/Users.fr.resx b/src/Client/Resources/Pages/Identity/Users/Users.fr.resx new file mode 100644 index 0000000..771937f --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/Users.fr.resx @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Actif + + + Créer + + + Courriel + + + Confirmation du courriel + + + Exporter + + + Utilisateurs filtrés exportés + + + Prénom + + + Nom + + + Gérer les rôles + + + Gérer les utilisateurs + + + Aucune action autorisée + + + Enregistrer un nouvel utilisateur + + + Recharger + + + Rechercher des utilisateurs + + + Utilisateurs + + + Utilisateurs exportés + + + Voir le profil + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/Users.id.resx b/src/Client/Resources/Pages/Identity/Users/Users.id.resx new file mode 100644 index 0000000..4b1f5dd --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/Users.id.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tindakan + + + Aktif + + + Tambah Pengguna + + + Email + + + Konfirmasi Email + + + Export + + + Filtered Users exported + + + Nama Depan + + + Nama Belakang + + + Atur Wewenang + + + Atur Pengguna + + + No Allowed Actions + + + Tidak Diizinkan. + + + Daftar Pengguna Baru + + + Muat Ulang + + + Cari Pengguna + + + Pengguna + + + Users exported + + + Lihat Profil + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/Users.it.resx b/src/Client/Resources/Pages/Identity/Users/Users.it.resx new file mode 100644 index 0000000..7d50b0c --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/Users.it.resx @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Azioni + + + Attiva + + + Conferma Password + + + Crea + + + Email + + + Conferma E-Mail + + + Export + + + Filtered Users exported + + + Nome + + + Cognome + + + Gestisci ruoli + + + Gestisci utenti + + + No Allowed Actions + + + Non autorizzato. + + + Password + + + Numero di telefono + + + Numero di telefono + + + Registra nuovo utente + + + Ricarica + + + Ricerca utenti + + + Nome utente + + + Nome utente + + + Utenti + + + Users exported + + + Vedi profilo + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/Users.km.resx b/src/Client/Resources/Pages/Identity/Users/Users.km.resx new file mode 100644 index 0000000..7e26532 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/Users.km.resx @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + មុខងារ + + + សកម្ម + + + បង្កើត + + + អ៊ីម៉ែល + + + អ៊ីម៉ែលបញ្ជាក់ + + + នាំចេញ + + + ច្រោះអ្នកប្រើប្រាស់បាននាំចេញ + + + នាមខ្លួន + + + នាមត្រកូល + + + កំណត់សិទ្ធិអ្នកប្រើប្រាស់ + + + កំណត់អ្នកប្រើប្រាស់ + + + សកម្មភាពមិនអនុញ្ញាត្ត + + + ចុះឈ្មោះអ្នកប្រើប្រាស់ថ្មី + + + ផ្ទុកឡើងវិញ + + + ស្វែងរកអ្នកប្រើប្រាស់ + + + អ្នកប្រើប្រាស់ + + + អ្នកប្រើប្រាស់បាននាំចេញ + + + បង្ហាញព័ត៌មានផ្ទាល់ខ្លួន + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/Users.nl.resx b/src/Client/Resources/Pages/Identity/Users/Users.nl.resx new file mode 100644 index 0000000..80ee914 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/Users.nl.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acties + + + Actief + + + Aanmaken + + + Email + + + Bevestiging per e-mail + + + Exporteren + + + Gefilterde gebruikers geëxporteerd + + + Voornaam + + + Achternaam + + + Rollen beheren + + + Gebruikers beheren + + + Geen toegestane acties + + + Nieuwe gebruiker registreren + + + Herladen + + + Gebruikers zoeken + + + Gebruikers + + + Gebruikers geëxporteerd + + + Profiel weergeven + + + Grenst aan + + + Dicht + + + Niet toegestaan. + + + Telefoonnummer + + + Gestreept + + + Gebruikersnaam + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/Users.ru.resx b/src/Client/Resources/Pages/Identity/Users/Users.ru.resx new file mode 100644 index 0000000..9b83555 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/Users.ru.resx @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Действия + + + Активный + + + Обрамлённый + + + Создать + + + Компактный + + + Email + + + Email подтверждён + + + Экспорт в Excel + + + Отфильтрованные пользователи экспортированы + + + Имя + + + Фамилия + + + Управление ролями + + + Управление пользователями + + + Нет доступных действий + + + Не разрешено. + + + Номер телефона + + + Зарегистрировать нового пользователя + + + Перезагрузить + + + Поиск пользователя... + + + Чередующийся + + + UserName + + + Пользователи + + + Пользователи экспортированы + + + Посмотреть профиль + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Identity/Users/Users.sv.resx b/src/Client/Resources/Pages/Identity/Users/Users.sv.resx new file mode 100644 index 0000000..bdc6cd6 --- /dev/null +++ b/src/Client/Resources/Pages/Identity/Users/Users.sv.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Åtgärder + + + Aktiv + + + Skapa + + + E-post + + + E-post Bekräftelse + + + Export + + + Filtered Users exported + + + Förnamn + + + Efternamn + + + Hantera Roller + + + Hantera Användare + + + No Allowed Actions + + + Inte Tillåtet. + + + Registrera ny användare + + + Ladda om + + + Sök efter användare + + + Användare + + + Users exported + + + Visa Profil + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Index.de.resx b/src/Client/Resources/Pages/Index.de.resx new file mode 100644 index 0000000..e998e26 --- /dev/null +++ b/src/Client/Resources/Pages/Index.de.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor WASM Vorlage + + + Erstellt mit dem Besten von + + + Kompatibel mit + + + Komponentenbibliothek + + + Falls du irgendwo steckenbleiben solltest, oder Fragen zu dieser Implementierung hast, habe ich eine Schnellstartanleitung für dich erstellt. + + + Anleitung lesen + + + Version 1.0 + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Index.en.resx b/src/Client/Resources/Pages/Index.en.resx new file mode 100644 index 0000000..14ddac7 --- /dev/null +++ b/src/Client/Resources/Pages/Index.en.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor WASM Boilerplate + + + Built with the goodness of + + + Compatible with + + + Component Library + + + In case you are stuck anywhere or have any queries regarding this implementation, I have compiled a Quick Start Guide for you reference. + + + Read The Guide + + + Version 1.0 + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Index.it.resx b/src/Client/Resources/Pages/Index.it.resx new file mode 100644 index 0000000..cb76ac0 --- /dev/null +++ b/src/Client/Resources/Pages/Index.it.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Blazor WASM Boilerplate + + + Sviluppato con l'ultilizzo di componenti della libreria + + + Compatibile con + + + Component Library + + + Nel caso in cui tu sia bloccato ovunque o hai domande riguardanti questa implementazione, ho compilato una guida rapida per il tuo riferimento. + + + GUIDA + + + Versione 1.0 + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/AddEditDocumentModal.ar.resx b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.ar.resx new file mode 100644 index 0000000..c32c8b3 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.ar.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أضف مستند + + + الغاء + + + وصف + + + نوع المستند + + + تنزيل + + + رقم المعرف + + + عام؟ + + + حفظ + + + عنوان + + + تحديث + + + تحديث المستند + + + رفع + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/AddEditDocumentModal.de.resx b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.de.resx new file mode 100644 index 0000000..5c863a4 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.de.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Dokument hinzufügen + + + Abbrechen + + + Beschreibung + + + Dokumenttyp + + + Herunterladen + + + Id + + + Öffentlich? + + + Speichern + + + Titel + + + Aktualisieren + + + Dokument aktualisieren + + + Hochladen + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/AddEditDocumentModal.en.resx b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.en.resx new file mode 100644 index 0000000..87f6df1 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.en.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Document + + + Cancel + + + Description + + + Document Type + + + Download + + + Id + + + Is Public? + + + Save + + + Title + + + Update + + + Update Document + + + Upload + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/AddEditDocumentModal.es.resx b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.es.resx new file mode 100644 index 0000000..dc71795 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.es.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Agregar Documento + + + Cancelar + + + Descripción + + + Tipo de Documento + + + Descargar + + + Id + + + ¿Es Público? + + + Guardar + + + Título + + + Actualizar + + + Actualizar Documento + + + Subir + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/AddEditDocumentModal.fr.resx b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.fr.resx new file mode 100644 index 0000000..2e1cc02 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.fr.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ajouter un document + + + Annuler + + + Description + + + Type du document + + + Télécharger + + + Identifiant + + + Est public ? + + + Sauvegarder + + + Titre + + + Mettre à jour + + + Mettre à jour le document + + + Téléverser + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/AddEditDocumentModal.id.resx b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.id.resx new file mode 100644 index 0000000..afa6f30 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.id.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tambah Dokumen + + + Batal + + + Deskripsi + + + Document Type + + + Unduh + + + Id + + + Dokumen Publik? + + + Simpan + + + Judul + + + Perbarui + + + Perbarui Dokumen + + + Unggah + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/AddEditDocumentModal.it.resx b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.it.resx new file mode 100644 index 0000000..6c14e3b --- /dev/null +++ b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.it.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aggiungi documento + + + Annulla + + + Descrizione + + + Document Type + + + Download + + + Id + + + È pubblico? + + + Salva + + + Titolo + + + Aggiorna + + + Aggiorna Documento + + + Carica + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/AddEditDocumentModal.km.resx b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.km.resx new file mode 100644 index 0000000..0797109 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.km.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + បន្ថែមឯកសារ + + + បោះបង់ + + + ការពិពណ៌នា + + + ប្រភេទឯកសារ + + + ទាញយក + + + លេខកូដសម្គាល់ + + + ជាសាធារណះ? + + + រក្សាទុក + + + ចំណងជើង + + + បច្ចុប្បន្នភាព + + + បច្ចុប្បន្នភាពឯកសារ + + + ផ្ទុកឡើង + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/AddEditDocumentModal.nl.resx b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.nl.resx new file mode 100644 index 0000000..3da7669 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.nl.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Document toevoegen + + + Annuleren + + + Beschrijving + + + Documenttype + + + Downloaden + + + Id + + + Is het openbaar? + + + Opslaan + + + Titel + + + Update + + + Document bijwerken + + + Uploaden + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/AddEditDocumentModal.ru.resx b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.ru.resx new file mode 100644 index 0000000..4da98f0 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.ru.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Добавить документ + + + Отмена + + + Описание + + + Тип документа + + + Скачать + + + Id + + + Публичный? + + + Сохранить + + + Заголовок + + + Обновить + + + Обновить документ + + + Загрузить + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/AddEditDocumentModal.sv.resx b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.sv.resx new file mode 100644 index 0000000..e23d6b5 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/AddEditDocumentModal.sv.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Lägg till dokument + + + Avbryt + + + Beskrivning + + + Document Type + + + Ladda ner + + + Id + + + Är Offentlig? + + + Spara + + + Rubrik + + + Uppdatera + + + Uppdatera Dokument + + + Ladda Upp + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.ar.resx b/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.ar.resx new file mode 100644 index 0000000..909c248 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.ar.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Document Type + + + الغاء + + + وصف + + + رقم المعرف + + + اسم + + + حثظ + + + تحديث + + + تحديث موع المستند + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.de.resx b/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.de.resx new file mode 100644 index 0000000..4b9bf26 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.de.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Dokumenttyp hinzufügen + + + Abbrechen + + + Beschreibung + + + Id + + + Name + + + Speichern + + + Aktualisieren + + + Dokumenttyp aktualisieren + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.en.resx b/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.en.resx new file mode 100644 index 0000000..8b60e1c --- /dev/null +++ b/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.en.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Document Type + + + Cancel + + + Description + + + Id + + + Name + + + Save + + + Update + + + Update Document Type + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.es.resx b/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.es.resx new file mode 100644 index 0000000..647a528 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.es.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Agregar Tipo de Documento + + + Cancelar + + + Descripción + + + Id + + + Nombre + + + Guardar + + + Actualizar + + + Actualizar Tipo de Documento + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.fr.resx b/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.fr.resx new file mode 100644 index 0000000..a0b980d --- /dev/null +++ b/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.fr.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ajouter un type de document + + + Annuler + + + Description + + + Identifiant + + + Nom + + + Sauvegarder + + + Mettre à jour + + + Mettre à jour le type de document + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.km.resx b/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.km.resx new file mode 100644 index 0000000..bd07f65 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.km.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + បន្ថែមប្រភេទឯកសារ + + + បោះបង់ + + + ពិពណ៌នា + + + លេខកូដ + + + ឈ្មោះ + + + រក្សាទុក + + + បច្ចុប្បន្នភាព + + + បច្ចុប្បន្នភាពប្រភេទឯកសារ + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.nl.resx b/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.nl.resx new file mode 100644 index 0000000..cb353bf --- /dev/null +++ b/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.nl.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Documenttype toevoegen + + + Annuleren + + + Beschrijving + + + Id + + + Naam + + + Opslaan + + + Update + + + Documenttype bijwerken + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.ru.resx b/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.ru.resx new file mode 100644 index 0000000..0f7290e --- /dev/null +++ b/src/Client/Resources/Pages/Misc/AddEditDocumentTypeModal.ru.resx @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Добавить тип документа + + + Отмена + + + Описание + + + Id + + + Наименование + + + Сохранить + + + Обновить + + + Обновить тип документа + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/DocumentStore.ar.resx b/src/Client/Resources/Pages/Misc/DocumentStore.ar.resx new file mode 100644 index 0000000..ae36281 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/DocumentStore.ar.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أجراءات + + + يحدها + + + تصفح المستندات المتاحة. + + + إنشاء + + + تاريخ الإنشاء + + + حذف + + + حذف المحتوى + + + كثيف + + + وصف + + + متجر المستندات + + + نوع الوثيقة + + + تحميل + + + يحرر + + + المعرف + + + عام + + + إدارة السمات الموسعة + + + لا توجد إجراءات مسموح بها + + + صاحب + + + إعادة تحميل + + + بحث + + + مخطط + + + عنوان + + + أنت + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/DocumentStore.de.resx b/src/Client/Resources/Pages/Misc/DocumentStore.de.resx new file mode 100644 index 0000000..d7f094f --- /dev/null +++ b/src/Client/Resources/Pages/Misc/DocumentStore.de.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktionen + + + Gerahmt + + + Verfügbare Dokumente durchsuchen. + + + Erstellen + + + Erstellungsdatum + + + Löschen + + + Inhalt löschen + + + Schmal + + + Beschreibung + + + Dokumentenspeicher + + + Dokumenttyp + + + Herunterladen + + + Bearbeiten + + + Id + + + Öffentlich + + + Erweiterte Attribute verwalten + + + Keine Aktionen erlaubt + + + Eigentümer + + + Neu laden + + + Suche + + + Gebändert + + + Titel + + + Du + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/DocumentStore.en.resx b/src/Client/Resources/Pages/Misc/DocumentStore.en.resx new file mode 100644 index 0000000..68cb0bb --- /dev/null +++ b/src/Client/Resources/Pages/Misc/DocumentStore.en.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Bordered + + + Browse Available Documents. + + + Create + + + Date Created + + + Delete + + + Delete Content + + + Dense + + + Description + + + Document Store + + + Document Type + + + Download + + + Edit + + + Id + + + Is Public + + + Manage Extended Attributes + + + No Allowed Actions + + + Owner + + + Reload + + + Search + + + Striped + + + Title + + + you + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/DocumentStore.es.resx b/src/Client/Resources/Pages/Misc/DocumentStore.es.resx new file mode 100644 index 0000000..74654a0 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/DocumentStore.es.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acciones + + + Bordeado + + + Navegar Documentos Disponibles. + + + Crear + + + Fecha de Creación + + + Borrar + + + ¿Desea eliminar el registro? + + + Denso + + + Descripción + + + Almacén de Documentos + + + Tipo de Documento + + + Descarga + + + Editar + + + Id + + + Es Público + + + Administrar Atributos Extendidos + + + Acciones no Permitidas + + + Propietario + + + Recargar + + + Buscar + + + Rayado + + + Título + + + Ud. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/DocumentStore.fr.resx b/src/Client/Resources/Pages/Misc/DocumentStore.fr.resx new file mode 100644 index 0000000..5247805 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/DocumentStore.fr.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Avec bordures + + + Parcourir les documents disponibles. + + + Créer + + + Date de création + + + Supprimer + + + Supprimer l'élément + + + Dense + + + Description + + + Stockage de documents + + + Type de document + + + Télécharger + + + Éditer + + + Identifiant + + + Est public + + + Gérer les attributs étendus + + + Aucune action autorisée + + + Propriétaire + + + Recharger + + + Rechercher + + + Rayé + + + Titre + + + vous + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/DocumentStore.id.resx b/src/Client/Resources/Pages/Misc/DocumentStore.id.resx new file mode 100644 index 0000000..4586f7d --- /dev/null +++ b/src/Client/Resources/Pages/Misc/DocumentStore.id.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tindakan + + + Telusuri Dokumen yang Tersedia. + + + Tambah Dokumen + + + Tanggal Dibuat + + + Hapus + + + Delete Content + + + Deskripsi + + + Penyimpanan Dokumen + + + Document Type + + + Unduh + + + Sunting + + + Id + + + Dokumen Publik + + + Manage Extended Attributes + + + No Allowed Actions + + + Pemilik + + + Muat Ulang + + + Cari + + + Judul + + + you + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/DocumentStore.it.resx b/src/Client/Resources/Pages/Misc/DocumentStore.it.resx new file mode 100644 index 0000000..51932c2 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/DocumentStore.it.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Azioni + + + Sfoglia i documenti disponibili. + + + Crea + + + Data di Creazione + + + Elimina + + + Delete Content + + + Descrizione + + + Archivio documenti + + + Document Type + + + Download + + + Modifica + + + Id + + + E' Pubblico + + + Manage Extended Attributes + + + No Allowed Actions + + + Proprietario + + + Ricarica + + + Cerca + + + Titolo + + + you + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/DocumentStore.km.resx b/src/Client/Resources/Pages/Misc/DocumentStore.km.resx new file mode 100644 index 0000000..d1d4b53 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/DocumentStore.km.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + សកម្មភាព + + + រកមើលឯកសារមានទាំងអស់ + + + បង្កើត + + + កាលបរិឆ្ឆេទបង្កើត + + + លុប + + + អត្ថបទត្រូវបានលុប + + + ការពិពណ៌នា + + + តំបន់រក្សាទុកឯកសារ + + + ប្រភេទឯកសារ + + + ទាញយក + + + កែប្រែ + + + លេខកូដសម្ងាត់ + + + ធ្វើអោយជាសាធារណះ + + + គ្រប់គ្រង ជួរឈរបន្ថែម + + + សកម្មភាពមិនបានអនុញ្ញាត្ត + + + ម្ខាស់ + + + ផ្ទុកឡើងវិញ + + + ស្វែងរក + + + ចំណងជើង + + + អ្នក + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/DocumentStore.nl.resx b/src/Client/Resources/Pages/Misc/DocumentStore.nl.resx new file mode 100644 index 0000000..5f962f4 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/DocumentStore.nl.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acties + + + Grenst aan + + + Blader door beschikbare documenten. + + + Aanmaken + + + Datum gemaakt + + + Verwijderen + + + Inhoud verwijderen + + + Dicht + + + Beschrijving + + + Documentopslag + + + Documenttype + + + Downloaden + + + Bewerken + + + Id + + + Is openbaar + + + Uitgebreide kenmerken beheren + + + Geen toegestane acties + + + Eigenaar + + + Herladen + + + Zoeken + + + Gestreept + + + Titel + + + jij + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/DocumentStore.ru.resx b/src/Client/Resources/Pages/Misc/DocumentStore.ru.resx new file mode 100644 index 0000000..6f251e4 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/DocumentStore.ru.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Действия + + + Обрамлённый + + + Обзор доступных документов. + + + Создать + + + Дата создания + + + Удалить + + + Удалить контент + + + Компактный + + + Описание + + + Хранилище документов + + + Тип документа + + + Скачать + + + Редактировать + + + Id + + + Публичный + + + Управление атрибутами + + + Нет доступных действий + + + Владелец + + + Перезагрузить + + + Поиск документов + + + Чередующийся + + + Заголовок + + + Вы + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/DocumentStore.sv.resx b/src/Client/Resources/Pages/Misc/DocumentStore.sv.resx new file mode 100644 index 0000000..869cdea --- /dev/null +++ b/src/Client/Resources/Pages/Misc/DocumentStore.sv.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Åtgärder + + + Bläddra i tillgängliga dokument. + + + Skapa + + + Skapat datum + + + Radera + + + Delete Content + + + Beskrivning + + + Dokument Förvaring + + + Document Type + + + Ladda Ner + + + Ändra + + + Id + + + Är Offentlig + + + Manage Extended Attributes + + + No Allowed Actions + + + Ägare + + + Ladda Om + + + Sök + + + Rubrik + + + you + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/DocumentTypes.ar.resx b/src/Client/Resources/Pages/Misc/DocumentTypes.ar.resx new file mode 100644 index 0000000..d317b38 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/DocumentTypes.ar.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أجراءات + + + يحدها + + + إنشاء + + + حذف + + + حذف المحتوى + + + كثيف + + + وصف + + + أنواع المستندات + + + أنواع المستندات التي تم تصديرها + + + يحرر + + + يصدر + + + تم تصدير أنواع المستندات التي تمت تصفيتها + + + المعرف + + + إدارة أنواع المستندات. + + + اسم + + + لا توجد إجراءات مسموح بها + + + إعادة تحميل + + + ابحث عن أنواع المستندات + + + مخطط + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/DocumentTypes.de.resx b/src/Client/Resources/Pages/Misc/DocumentTypes.de.resx new file mode 100644 index 0000000..930df1f --- /dev/null +++ b/src/Client/Resources/Pages/Misc/DocumentTypes.de.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktionen + + + Gerahmt + + + Erstellen + + + Löschen + + + Inhalt löschen + + + Schmal + + + Beschreibung + + + Dokumenttypen + + + Dokumenttypen exportiert + + + Bearbeiten + + + Export + + + Gefilterte Dokumenttypen exportiert + + + Id + + + Dokumenttypen verwalten. + + + Name + + + Keine Aktionen erlaubt + + + Neu laden + + + Nach Dokumenttypen suchen + + + Gebändert + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/DocumentTypes.en.resx b/src/Client/Resources/Pages/Misc/DocumentTypes.en.resx new file mode 100644 index 0000000..ba73b34 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/DocumentTypes.en.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Bordered + + + Create + + + Delete + + + Delete Content + + + Dense + + + Description + + + Document Types + + + Document Types exported + + + Edit + + + Export + + + Filtered Document Types exported + + + Id + + + Manage Document Types. + + + Name + + + No Allowed Actions + + + Reload + + + Search for Document Types + + + Striped + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/DocumentTypes.es.resx b/src/Client/Resources/Pages/Misc/DocumentTypes.es.resx new file mode 100644 index 0000000..527d617 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/DocumentTypes.es.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acciones + + + Bordeado + + + Crear + + + Borrar + + + ¿Desea borrar el registro? + + + Denso + + + Descripción + + + Tipos de Documentos + + + Tipos de Documentos exportados + + + Editar + + + Exportar + + + Tipos de Documentos Filtrados exportados + + + Id + + + Administar Tipos de Documentos. + + + Nombre + + + Acciones no Permitidas + + + Recargar + + + Buscar Tipos de Documentos + + + Rayado + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/DocumentTypes.fr.resx b/src/Client/Resources/Pages/Misc/DocumentTypes.fr.resx new file mode 100644 index 0000000..19ca0fb --- /dev/null +++ b/src/Client/Resources/Pages/Misc/DocumentTypes.fr.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Avec bordures + + + Création + + + Suppression + + + Supprimer l'élément + + + Dense + + + Description + + + Types de documents + + + Types de documents exportés + + + Éditer + + + Exporter + + + Types de documents filtrés exportés + + + Identifiants + + + Gérer les types de documents + + + Nom + + + Aucune action autorisée + + + Recharger + + + Rechercher parmis les types de documents + + + Rayé + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/DocumentTypes.km.resx b/src/Client/Resources/Pages/Misc/DocumentTypes.km.resx new file mode 100644 index 0000000..2ab117c --- /dev/null +++ b/src/Client/Resources/Pages/Misc/DocumentTypes.km.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + សកម្មភាព + + + ព្រុំប្រទល់ + + + បង្កើត + + + លុប + + + លុបខ្លឹមសារ + + + ពង្រួម + + + ពិពណ៌នា + + + ប្រភេទឯកសារ + + + ប្រភេទឯកសារនាំចេញ + + + កែប្រែ + + + នាំចេញ + + + ច្រោះប្រភេទឯកសារនាំចេញ + + + លេខកូដ + + + គ្រប់គ្រងប្រភេទឯកសារ + + + ឈ្មោះ + + + សកម្មភាពមិនអនុញ្ញាត្ត + + + ផ្ទុកឡើងវិញ + + + ស្វែងរកប្រភេទឯកសារ + + + ឆ្លាស់ពណ៌ + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/DocumentTypes.nl.resx b/src/Client/Resources/Pages/Misc/DocumentTypes.nl.resx new file mode 100644 index 0000000..65e8af1 --- /dev/null +++ b/src/Client/Resources/Pages/Misc/DocumentTypes.nl.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acties + + + Grenst aan + + + Aanmaken + + + Verwijderen + + + Inhoud verwijderen + + + Dicht + + + Beschrijving + + + Documenttypen + + + Geëxporteerde documenttypen + + + Bewerken + + + Exporteren + + + Gefilterde documenttypen geëxporteerd + + + Id + + + Documenttypen beheren. + + + Naam + + + Geen toegestane acties + + + Herladen + + + Zoeken naar documenttypen + + + Gestreept + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Misc/DocumentTypes.ru.resx b/src/Client/Resources/Pages/Misc/DocumentTypes.ru.resx new file mode 100644 index 0000000..1d369bb --- /dev/null +++ b/src/Client/Resources/Pages/Misc/DocumentTypes.ru.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Действия + + + Обрамлённый + + + Создать + + + Удалить + + + Удалить контент + + + Компактный + + + Описание + + + Типы документов + + + Типы документов экспортированы + + + Редактировать + + + Экспорт в Excel + + + Отфильтрованные типы документов экспортированы + + + Id + + + Управление типами документов. + + + Наименование + + + Нет доступных действий + + + Перезагрузить + + + Поиск типов документов... + + + Чередующийся + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Multitenancy/Tenants.de.resx b/src/Client/Resources/Pages/Multitenancy/Tenants.de.resx new file mode 100644 index 0000000..f0beede --- /dev/null +++ b/src/Client/Resources/Pages/Multitenancy/Tenants.de.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktiv + + + E-Mail-Adresse des Administrators + + + Name + + + Gültig bis + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Multitenancy/Tenants.en.resx b/src/Client/Resources/Pages/Multitenancy/Tenants.en.resx new file mode 100644 index 0000000..383c6a7 --- /dev/null +++ b/src/Client/Resources/Pages/Multitenancy/Tenants.en.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Active + + + Admin Email + + + Name + + + Valid Upto + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Multitenancy/Tenants.it.resx b/src/Client/Resources/Pages/Multitenancy/Tenants.it.resx new file mode 100644 index 0000000..356ba8f --- /dev/null +++ b/src/Client/Resources/Pages/Multitenancy/Tenants.it.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Attivo + + + Email (Adm) + + + Nome + + + Valito fino a + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Multitenancy/UpgradeSubscriptionModal.de.resx b/src/Client/Resources/Pages/Multitenancy/UpgradeSubscriptionModal.de.resx new file mode 100644 index 0000000..75eeef9 --- /dev/null +++ b/src/Client/Resources/Pages/Multitenancy/UpgradeSubscriptionModal.de.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Abbrechen + + + Aktuelles Ablaufdatum + + + Neues Ablaufdatum + + + Aktualisieren + + + Abonnement aktualisieren + + + Abonnement aktualisiert. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Multitenancy/UpgradeSubscriptionModal.en.resx b/src/Client/Resources/Pages/Multitenancy/UpgradeSubscriptionModal.en.resx new file mode 100644 index 0000000..c788ea0 --- /dev/null +++ b/src/Client/Resources/Pages/Multitenancy/UpgradeSubscriptionModal.en.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancel + + + Current Expiry Date + + + New Expiry Date + + + Upgrade + + + Upgrade Subscription + + + Upgraded Subscription. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Multitenancy/UpgradeSubscriptionModal.it.resx b/src/Client/Resources/Pages/Multitenancy/UpgradeSubscriptionModal.it.resx new file mode 100644 index 0000000..87d54c5 --- /dev/null +++ b/src/Client/Resources/Pages/Multitenancy/UpgradeSubscriptionModal.it.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annulla + + + Data di scadenza + + + Nuova data di scadenza + + + Aggiornamento + + + Aggiorna Subscription + + + Subscription Aggiornata. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/AuditLogs.ar.resx b/src/Client/Resources/Pages/Personal/AuditLogs.ar.resx new file mode 100644 index 0000000..2bacb36 --- /dev/null +++ b/src/Client/Resources/Pages/Personal/AuditLogs.ar.resx @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + مسارات المراجعة + + + تم تصدير مسارات التدقيق + + + يحدها + + + الغاء + + + مسح + + + تتأثر الأعمدة + + + تاريخ + + + النطاق الزمني للبحث + + + كثيف + + + تفاصيل معرف الممر + + + تصدير إلى Excel + + + تم تصدير مسارات التدقيق المصفاة + + + إخفاء + + + المعرف + + + محلي + + + قيم جديدة + + + موافق + + + المفتاح الأساسي + + + ابحث عن مسارات + + + ابحث في القيم الجديدة + + + ابحث في القيم القديمة + + + ابحث في القيم القديمة + + + عرض + + + مخطط + + + اسم الجدول + + + تفاضيل + + + نوع + + + التوقيت العالمي + + + أنشطتك الأخيرة. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/AuditLogs.de.resx b/src/Client/Resources/Pages/Personal/AuditLogs.de.resx new file mode 100644 index 0000000..f16282e --- /dev/null +++ b/src/Client/Resources/Pages/Personal/AuditLogs.de.resx @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Prüfpfade + + + Prüfpfade aktualisiert + + + Gerahmt + + + Abbrechen + + + Leeren + + + Betroffene Spalten + + + Datum + + + Zeitraum für Suche + + + Schmal + + + Details zur Prüfpfad-Id + + + Zu Excel exportieren + + + Gefilterte Prüfpfade exported + + + Verstecken + + + Id + + + Lokal + + + Neue Werte + + + Ok + + + Alte Werte + + + Primärschlüssekl + + + Nach Prüfpfaden suchen + + + In neuen Werten suchen + + + In alten Werten suchen + + + Anzeigen + + + Gebändert + + + Tabellenname + + + Prüfpfad-Details + + + Typ + + + UTC + + + Deine letzten Aktivitäten. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/AuditLogs.en.resx b/src/Client/Resources/Pages/Personal/AuditLogs.en.resx new file mode 100644 index 0000000..c6b6a01 --- /dev/null +++ b/src/Client/Resources/Pages/Personal/AuditLogs.en.resx @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Audit Trails + + + Audit Trails exported + + + Bordered + + + Cancel + + + Clear + + + Columns Affected + + + Date + + + Date Range For Searching + + + Dense + + + Details for Trail ID + + + Export To Excel + + + Filtered Audit Trails exported + + + Hide + + + Id + + + Local + + + New Values + + + Ok + + + Old Values + + + Primary Key + + + Search for Trails + + + Search in New Values + + + Search in Old Values + + + Show + + + Striped + + + Table Name + + + Trail Details + + + Type + + + UTC + + + Your Recent Activities. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/AuditLogs.es.resx b/src/Client/Resources/Pages/Personal/AuditLogs.es.resx new file mode 100644 index 0000000..a363e1c --- /dev/null +++ b/src/Client/Resources/Pages/Personal/AuditLogs.es.resx @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Registro de Auditoría + + + Registro de Auditoría exportado + + + Bordeado + + + Cancelar + + + Limpiar + + + Columnas Afectadas + + + Fecha + + + Rango de Fechas para Búsqueda + + + Denso + + + Detalles para Registro ID + + + Exportar a Excel + + + Registros de Auditoría Filtrados exportados + + + Ocultar + + + Id + + + Local + + + Nuevos Valores + + + Ok + + + Valores Anteriores + + + Clave Primaria + + + Buscar Registros + + + Buscar en Valores Nuevos + + + Buscar en Valores Anteriores + + + Mostrar + + + Rayado + + + Nombre de Tabla + + + Detalle de Registro + + + Tipo + + + UTC + + + Su actividad reciente. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/AuditLogs.fr.resx b/src/Client/Resources/Pages/Personal/AuditLogs.fr.resx new file mode 100644 index 0000000..f2029e1 --- /dev/null +++ b/src/Client/Resources/Pages/Personal/AuditLogs.fr.resx @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Pistes d'audit + + + Pistes d'audit exportées + + + Avec bordures + + + Annulées + + + Effacer + + + Colonnes affectées + + + Date + + + Plage de dates pour la recherche + + + Dense + + + Détail de la piste d'identifiant + + + Exporter vers Excel + + + Pistes d'audit filtrés exportées + + + Cacher + + + Identifiant + + + Local + + + Nouvelles valeurs + + + OK + + + Anciennes valeurs + + + Clé primaire + + + Rechercher des pistes + + + Rechercher parmis les nouvelles valeurs + + + Rechercher parmis les anciennes valeurs + + + Afficher + + + Rayé + + + Nom de la table + + + Détails de la piste + + + Type + + + UTC + + + Activité récente + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/AuditLogs.it.resx b/src/Client/Resources/Pages/Personal/AuditLogs.it.resx new file mode 100644 index 0000000..c3eab91 --- /dev/null +++ b/src/Client/Resources/Pages/Personal/AuditLogs.it.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Registro Attività + + + Audit Trails exported + + + Colonne Interessate + + + Data + + + Dettagli per ID Attività + + + Esporta in Excel + + + Filtered Audit Trails exported + + + Nascondi + + + Id + + + Locale + + + Nuovi valori + + + Vecchi valori + + + Chiave Primaria + + + Cerca Attività + + + Mostra + + + Nome Tabella + + + Dettagli Attività + + + Tipo + + + UTC + + + Le tue Attività Recenti. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/AuditLogs.km.resx b/src/Client/Resources/Pages/Personal/AuditLogs.km.resx new file mode 100644 index 0000000..d3a1341 --- /dev/null +++ b/src/Client/Resources/Pages/Personal/AuditLogs.km.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + កំណត់ត្រាប្រព័ន្ធ + + + កំណត់ត្រាប្រព័ន្ធ នាំចេញ + + + ជួរឈរដែលបានកែប្រែ + + + កាលបរិច្ឆេទ + + + កំណត់ត្រាលម្អិតសម្រាប់កំណត់ត្រាដែលមានលេខសម្ងាល់ + + + បម្លែងជា​ Excel + + + ច្រោះកំណត់ត្រាប្រព័ន្ធនាំចេញ + + + បិទ + + + លេខកូដសម្ងាល់ + + + ខាងក្នុង + + + តម្លៃថ្មី + + + តម្លៃចាស់ + + + លេខសម្គាល់គោល + + + ស្វែងរកកំណត់ត្រាប្រព័ន្ធ + + + បង្ហាញ + + + ឈ្មោះតារាង + + + កំណត់ត្រាលម្អិត + + + ប្រភេទ + + + ម៉ោងសកល + + + សកម្មភាពរបស់អ្នកចុងក្រោយ + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/AuditLogs.nl.resx b/src/Client/Resources/Pages/Personal/AuditLogs.nl.resx new file mode 100644 index 0000000..b84bf72 --- /dev/null +++ b/src/Client/Resources/Pages/Personal/AuditLogs.nl.resx @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Audit Trails + + + Audit Trails geëxporteerd + + + Grenst aan + + + Annuleren + + + Duidelijk + + + Betrokken kolommen + + + Datum + + + Datumbereik voor zoeken + + + Dicht + + + Details voor Trail ID + + + Exporteren naar Excel + + + Gefilterde controletrails geëxporteerd + + + Verbergen + + + Id + + + Lokaal + + + Nieuwe Waarden + + + OK + + + Oude Waarden + + + Primary Key + + + Zoeken naar paden + + + Zoeken in nieuwe waarden + + + Zoeken in oude waarden + + + Tonen + + + Gestreept + + + Table Naam + + + Trail Details + + + Type + + + UTC + + + Uw recente activiteiten. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/AuditLogs.ru.resx b/src/Client/Resources/Pages/Personal/AuditLogs.ru.resx new file mode 100644 index 0000000..583705f --- /dev/null +++ b/src/Client/Resources/Pages/Personal/AuditLogs.ru.resx @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Журналы аудита + + + Журналы аудита экспортированы + + + Обрамлённый + + + Отмена + + + Очистить + + + Затронутые стобцы + + + Дата + + + Диапазон дат для поиска + + + Компактный + + + Детали для записи с ID + + + Экспорт в Excel + + + Отфильтрованные журналы аудита экспортированы + + + Скрыть + + + Id + + + Локальное + + + Новые значения + + + Ok + + + Старые значения + + + Первичный ключ + + + Поиск в журналах + + + Искать в новых значениях + + + Искать в старых значениях + + + Показать + + + Чередующийся + + + Имя таблицы + + + Детали записи в журнале + + + Тип + + + UTC + + + Ваша текущая активность. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/AuditLogs.sv.resx b/src/Client/Resources/Pages/Personal/AuditLogs.sv.resx new file mode 100644 index 0000000..3b95b8b --- /dev/null +++ b/src/Client/Resources/Pages/Personal/AuditLogs.sv.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Granskningsspår + + + Audit Trails exported + + + Berörda kolumner + + + Datum + + + Detaljer för Spår ID + + + Exportera till Excel + + + Filtered Audit Trails exported + + + Göm + + + Id + + + Lokalt + + + Nya Värden + + + Gamla Värden + + + Primärnyckel + + + Sök efter spår + + + Visa + + + Tabellnamn + + + Spår Detaljer + + + Typ + + + UTC + + + Dina senaste aktiviteter. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/Dashboard.ar.resx b/src/Client/Resources/Pages/Personal/Dashboard.ar.resx new file mode 100644 index 0000000..a803152 --- /dev/null +++ b/src/Client/Resources/Pages/Personal/Dashboard.ar.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أبريل + + + أغسطس + + + العلامات التجارية + + + الرسوم البيانية قادمة قريبا + + + لوحة القيادة + + + ديسمبر + + + سمات المستند الممتدة + + + أنواع المستندات + + + وثائق + + + فبراير + + + يناير + + + يوليو + + + يونيو + + + مارس + + + مايو + + + نوفمبر + + + أكتوبر + + + منتجات + + + رؤى سريعة. + + + تحديثات الوقت الحقيقي & رؤى مع SignalR. + + + الأدوار المسجلة + + + المستخدمون المسجلون + + + سبتمبر + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/Dashboard.de.resx b/src/Client/Resources/Pages/Personal/Dashboard.de.resx new file mode 100644 index 0000000..a20fd84 --- /dev/null +++ b/src/Client/Resources/Pages/Personal/Dashboard.de.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Apr + + + Aug + + + Marken + + + Diagramme kommen bald... + + + Dashboard + + + Dez + + + Erweiterte Dokumentattribute + + + Dokumenttypen + + + Dokumente + + + Feb + + + Jan + + + Jul + + + Jun + + + Mär + + + Mai + + + Nov + + + Okt + + + Produkte + + + Schnelle Einblicke. + + + Echtzeitaktualisierungen & Einblicke mit SignalR. + + + Registrierte Rollen + + + Registrierte Benutzer + + + Sep + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/Dashboard.en.resx b/src/Client/Resources/Pages/Personal/Dashboard.en.resx new file mode 100644 index 0000000..0ec5a3f --- /dev/null +++ b/src/Client/Resources/Pages/Personal/Dashboard.en.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Apr + + + Aug + + + Brands + + + Charts comming soon ish... + + + Dashboard + + + Dec + + + Document Extended Attributes + + + Document Types + + + Documents + + + Feb + + + Jan + + + Jul + + + Jun + + + Mar + + + May + + + Nov + + + Oct + + + Products + + + Quick Insights. + + + Realtime Updates & Insights with SignalR. + + + Registered Roles + + + Registered Users + + + Sep + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/Dashboard.es.resx b/src/Client/Resources/Pages/Personal/Dashboard.es.resx new file mode 100644 index 0000000..e278606 --- /dev/null +++ b/src/Client/Resources/Pages/Personal/Dashboard.es.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Abr + + + Ago + + + Marcas + + + Próximamente gráficos... + + + Panel de Control + + + Dic + + + Atributos Extendidos de Documentos + + + Tipos de Documentos + + + Documentos + + + Feb + + + Ene + + + Jul + + + Jun + + + Mar + + + May + + + Nov + + + Oct + + + Productos + + + Perspectivas Rápidas. + + + Actualizaciones en Tiempo Real & Perspectivas con SignalR. + + + Roles Registrados + + + Usuarios Registrados + + + Sep + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/Dashboard.fr.resx b/src/Client/Resources/Pages/Personal/Dashboard.fr.resx new file mode 100644 index 0000000..819beeb --- /dev/null +++ b/src/Client/Resources/Pages/Personal/Dashboard.fr.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Avr. + + + Août + + + Marques + + + Tableau de bord + + + Déc. + + + Attributs étendus des documents + + + Types de documents + + + Documents + + + Févr. + + + Janv. + + + Juill. + + + Juin + + + Mars + + + Mai + + + Nov. + + + Oct. + + + Produits + + + Aperçus rapides. + + + Mises à jour en temps réel & aperçus avec SignalR. + + + Roles enregistrés + + + Utilisateurs enregistrés + + + Sept. + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/Dashboard.id.resx b/src/Client/Resources/Pages/Personal/Dashboard.id.resx new file mode 100644 index 0000000..c7a7fed --- /dev/null +++ b/src/Client/Resources/Pages/Personal/Dashboard.id.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Merek + + + Grafik akan segera hadir... + + + Dasbor + + + Document Extended Attributes + + + Document Types + + + Documents + + + Produk + + + Wawasan Singkat. + + + Wewenang Terdaftar + + + Pengguna Terdaftar + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/Dashboard.it.resx b/src/Client/Resources/Pages/Personal/Dashboard.it.resx new file mode 100644 index 0000000..316467e --- /dev/null +++ b/src/Client/Resources/Pages/Personal/Dashboard.it.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Prodotti + + + Utenti registrati + + + Marche + + + Grafici... coming soon... + + + Dashboard + + + Approfondimenti rapidi. + + + Ruoli registrati + + + Documenti + + + Tipi di documenti + + + Document Extended Attributes + + + Aggiornamenti in tempo reale e approfondimenti con SignalR + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/Dashboard.km.resx b/src/Client/Resources/Pages/Personal/Dashboard.km.resx new file mode 100644 index 0000000..809c44a --- /dev/null +++ b/src/Client/Resources/Pages/Personal/Dashboard.km.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ម៉ាក + + + ផ្ទាំងឆាតនឹងមកដល់ឆាប់ៗនេះ + + + ផ្ទាំងទិន្នន័យ + + + ជួរឈរឯកសារ + + + ប្រភេទឯកសារ + + + ឯកសារ + + + ផលិតផល + + + ផ្ទាំងទិន្នន័យសង្ខេប + + + ចំនួនតួនាទីសរុប + + + ចំនួនអ្នកប្រើប្រាស់សរុប + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/Dashboard.nl.resx b/src/Client/Resources/Pages/Personal/Dashboard.nl.resx new file mode 100644 index 0000000..d5e9851 --- /dev/null +++ b/src/Client/Resources/Pages/Personal/Dashboard.nl.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Apr + + + Aug + + + Merken + + + Grafieken binnenkort ish... + + + Dashboard + + + Dec + + + Uitgebreide kenmerken van document + + + Documenttypen + + + Documenten + + + Februari + + + Jan + + + Jul + + + Jun + + + Mar + + + Mei + + + Nov + + + Oct + + + Producten + + + Snelle inzichten. + + + Realtime updates en inzichten met SignalR. + + + Geregistreerde rollen + + + Geregistreerde gebruikers + + + Sep + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/Dashboard.ru.resx b/src/Client/Resources/Pages/Personal/Dashboard.ru.resx new file mode 100644 index 0000000..fab4703 --- /dev/null +++ b/src/Client/Resources/Pages/Personal/Dashboard.ru.resx @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Апр + + + Авг + + + Брендов + + + Графики скоро появятся ... + + + Dashboard + + + Дек + + + Расширенных атрибутов документов + + + Типов документов + + + Документов + + + Фев + + + Янв + + + Июл + + + Июн + + + Мрт + + + Май + + + Ноя + + + Окт + + + Продуктов + + + Быстрая информация. + + + Обновления и аналитика в реальном времени с помощью SignalR. + + + Ролей + + + Пользователей + + + Сен + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/Personal/Dashboard.sv.resx b/src/Client/Resources/Pages/Personal/Dashboard.sv.resx new file mode 100644 index 0000000..25c864d --- /dev/null +++ b/src/Client/Resources/Pages/Personal/Dashboard.sv.resx @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Varumärken + + + Diagram kommer ganska snart... + + + Instrumentpanel + + + Document Extended Attributes + + + Document Types + + + Documents + + + Produkter + + + Snabba insikter. + + + Registrerade Roller + + + Registrerade Användare + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.ar.resx b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.ar.resx new file mode 100644 index 0000000..5642e31 --- /dev/null +++ b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.ar.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + إضافة الخصائص الإضافية + + + إلغاء + + + مسح + + + تاريخ + + + عشري + + + وصف + + + رقم المعرف + + + المعرف الخارجي + + + مجموعة + + + المعرف + + + مفعل؟ + + + Json + + + مفتاح + + + موافق + + + حفظ + + + نص + + + وقت + + + نوع + + + تحديث + + + تحديث الخصائص الإضافية + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.de.resx b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.de.resx new file mode 100644 index 0000000..7c7cd54 --- /dev/null +++ b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.de.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Erweiterte Attribute hinzufügen + + + Abbrechen + + + Leeren + + + Datum + + + Dezimal + + + Beschreibung + + + Objekt-Id + + + Externe Id + + + Gruppe + + + Id + + + Ist Aktiv + + + Json + + + Schlüssel + + + Ok + + + Speichern + + + Text + + + Zeit + + + Typ + + + Aktualisieren + + + Erweiterte Attribute aktualieren + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.en.resx b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.en.resx new file mode 100644 index 0000000..9e1f7c0 --- /dev/null +++ b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.en.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Extended Attribute + + + Cancel + + + Clear + + + Date + + + Decimal + + + Description + + + Entity Id + + + External Id + + + Group + + + Id + + + Is Active + + + Json + + + Key + + + Ok + + + Save + + + Text + + + Time + + + Type + + + Update + + + Update Extended Attribute + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.es.resx b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.es.resx new file mode 100644 index 0000000..e061dff --- /dev/null +++ b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.es.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Agregar Atributo Extendido + + + Cancelar + + + Limpiar + + + Fecha + + + Decimal + + + Descripción + + + Id de Entidad + + + Id Externo + + + Grupo + + + Id + + + ¿Está Activo? + + + Json + + + Clave + + + Ok + + + Guardar + + + Texto + + + Hora + + + Tipo + + + Actualizar + + + Actualizar Atributos Extendidos + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.fr.resx b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.fr.resx new file mode 100644 index 0000000..0cbb20b --- /dev/null +++ b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.fr.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ajouter un attribut étendu + + + Annuler + + + Effacer + + + Date + + + Décimal + + + Description + + + Identifiant de l'entité + + + Identifiant externe + + + Groupe + + + Identifiant + + + Est actif + + + Json + + + Clé + + + OK + + + Sauvegarder + + + Texte + + + Heure + + + Type + + + Mettre à jour + + + Mettre à jour l'attribut étendu + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.id.resx b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.id.resx new file mode 100644 index 0000000..9e1f7c0 --- /dev/null +++ b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.id.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Extended Attribute + + + Cancel + + + Clear + + + Date + + + Decimal + + + Description + + + Entity Id + + + External Id + + + Group + + + Id + + + Is Active + + + Json + + + Key + + + Ok + + + Save + + + Text + + + Time + + + Type + + + Update + + + Update Extended Attribute + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.it.resx b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.it.resx new file mode 100644 index 0000000..ff5ace2 --- /dev/null +++ b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.it.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Extended Attribute + + + Annulla + + + Pulisci + + + Date + + + Decimal + + + Description + + + Entity Id + + + External Id + + + Group + + + Id + + + IsActive + + + Json + + + Key + + + Ok + + + Salva + + + Text + + + Time + + + Type + + + Aggiorna + + + Update Extended Attribute + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.km.resx b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.km.resx new file mode 100644 index 0000000..184bb9f --- /dev/null +++ b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.km.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + បន្ធែមជួរឈរ + + + បោះបង់ + + + សម្អាត + + + Date + + + Decimal + + + ពិពណ៌នា + + + Entity Id + + + External Id + + + ក្រុម + + + Id + + + គឺសកម្ម + + + Json + + + Key + + + អូខេ + + + រក្សាទុក + + + Text + + + Time + + + ប្រភេទ + + + បច្ចុប្បន្នភាព + + + បច្ចុប្បន្នភាពជួរឈរបន្ថែម + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.nl.resx b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.nl.resx new file mode 100644 index 0000000..1a8594e --- /dev/null +++ b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.nl.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Uitgebreid kenmerk toevoegen + + + Annuleren + + + Duidelijk + + + Datum + + + Decimaal + + + Beschrijving + + + Entiteits-id + + + Externe id + + + Groep + + + Id + + + Is actief + + + Json + + + Sleutel + + + OK + + + Opslaan + + + Sms + + + Tijd + + + Type + + + Update + + + Uitgebreid kenmerk bijwerken + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.ru.resx b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.ru.resx new file mode 100644 index 0000000..934224d --- /dev/null +++ b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.ru.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Добавить расширенный атрибут + + + Отмена + + + Очистить + + + Дата + + + Числовое значение + + + Описание + + + Id сущности + + + Внешний Id + + + Группа + + + Id + + + Активный? + + + Json значение + + + Ключ + + + Ок + + + Сохранить + + + Текстовое значение + + + Время + + + Тип + + + Обновить + + + Обновить расширенный атрибут + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.sv.resx b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.sv.resx new file mode 100644 index 0000000..9e1f7c0 --- /dev/null +++ b/src/Client/Resources/Shared/Components/AddEditExtendedAttributeModalLocalization.sv.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Add Extended Attribute + + + Cancel + + + Clear + + + Date + + + Decimal + + + Description + + + Entity Id + + + External Id + + + Group + + + Id + + + Is Active + + + Json + + + Key + + + Ok + + + Save + + + Text + + + Time + + + Type + + + Update + + + Update Extended Attribute + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.ar.resx b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.ar.resx new file mode 100644 index 0000000..ca79862 --- /dev/null +++ b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.ar.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + أجراءات + + + كل المجموعات + + + Bordered + + + إنشاء + + + حذف + + + هل تريد حذف السمة الموسعة؟ + + + كثيف + + + وصف + + + تعديل + + + معرف الكينونة + + + تصدير + + + الخصائص الإضافية التي تم تصديرها + + + معرف خارجي + + + تم تصدير السمات الموسعة التي تمت تصفيتها + + + مجموعة + + + رقم المعرف + + + تضمين حقول الكينونة (تصدير) + + + نشط؟ + + + مفتاح + + + إدارة الخصائص الإضافية {0} + + + إدارة سمات {0} {1} الموسعة + + + لا توجد إجراءات مسموح بها + + + غير مسموح. + + + مجموعة مختارة فقط (تصدير) + + + مالك + + + إعادة تحميل + + + ابحث عن {0} السمات الموسعة + + + مخطط + + + نوع + + + قيمة + + + أنت + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.de.resx b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.de.resx new file mode 100644 index 0000000..f7b7111 --- /dev/null +++ b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.de.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktionen + + + Alle Gruppen + + + Gebändert + + + Erstellen + + + Löschen + + + Erweiterte Attribute löschen? + + + Schmal + + + Beschreibung + + + Bearbeiten + + + Objekt-Id + + + Export + + + Erweiterte Attribute exportiert + + + Externe Id + + + Gefilterte erweiterte Attribute exportiert + + + Gruppe + + + Id + + + Objektfelder einschließen (Export) + + + Ist Aktiv + + + Schlüssel + + + Verwalte {0} erweiterte Attribute + + + Verwalte erweiterte {0} Attribute von {1} + + + No Allowed Actions + + + Not Allowed. + + + Only Selected Group (Export) + + + Owner + + + Reload + + + Search For {0} Extended Attributes + + + Striped + + + Type + + + Value + + + you + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.en.resx b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.en.resx new file mode 100644 index 0000000..4270e95 --- /dev/null +++ b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.en.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + All Groups + + + Bordered + + + Create + + + Delete + + + Delete Extended Attribute? + + + Dense + + + Description + + + Edit + + + Entity Id + + + Export + + + Extended Attributes exported + + + External Id + + + Filtered Extended Attributes exported + + + Group + + + Id + + + Include Entity fields (Export) + + + Is Active + + + Key + + + Manage {0} Extended Attributes + + + Manage {0} {1}'s Extended Attributes + + + No Allowed Actions + + + Not Allowed. + + + Only Selected Group (Export) + + + Owner + + + Reload + + + Search For {0} Extended Attributes + + + Striped + + + Type + + + Value + + + you + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.es.resx b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.es.resx new file mode 100644 index 0000000..1cfea1f --- /dev/null +++ b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.es.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acciones + + + Todos los Grupos + + + Bordeado + + + Crear + + + Borrar + + + ¿Eliminar Atributo Extendido? + + + Denso + + + Descripción + + + Editar + + + Id de Entidad + + + Exportar + + + Atributos Extendidos exportados + + + Id Externo + + + Atributos Extendidos Filtrados exportados + + + Grupo + + + Id + + + Incluir campos de Entidad (Exportar) + + + ¿Está Activo? + + + Clave + + + Administrar Atributos Extendidos ({0}) + + + Administrar los Atributos Extendidos de: {0}-{1} + + + Acciones no Permitidas + + + No Permitido. + + + Solo el Grupo Seleccionado (Exportar) + + + Propietario + + + Recargar + + + Buscar Atributos Extendidos ({0}) + + + Rayado + + + Tipo + + + Valor + + + Ud. + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.fr.resx b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.fr.resx new file mode 100644 index 0000000..706054b --- /dev/null +++ b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.fr.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Tous les groupes + + + Avec bordure + + + Créer + + + Supprimer + + + Supprimer l'attribut étendu ? + + + Dense + + + Description + + + Éditer + + + Identifiant de l'entité + + + Exporter + + + Attributs étendus exportés + + + Identifiant externe + + + Attributs étendus filtrés exportés + + + Groupe + + + Identifiant + + + Inclure tous les champs (export) + + + Est actif + + + Clé + + + Gérer les attributs étendus de {0} + + + Gérer les attributs étendus de {0} {1} + + + Aucune action autorisée + + + Non autorisé. + + + Seulement les groupes sélectionné (export) + + + Propriétaire + + + Recharger + + + Rechercher les attributs étendus de {0} + + + Rayé + + + Type + + + Valeur + + + vous + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.id.resx b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.id.resx new file mode 100644 index 0000000..4270e95 --- /dev/null +++ b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.id.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + All Groups + + + Bordered + + + Create + + + Delete + + + Delete Extended Attribute? + + + Dense + + + Description + + + Edit + + + Entity Id + + + Export + + + Extended Attributes exported + + + External Id + + + Filtered Extended Attributes exported + + + Group + + + Id + + + Include Entity fields (Export) + + + Is Active + + + Key + + + Manage {0} Extended Attributes + + + Manage {0} {1}'s Extended Attributes + + + No Allowed Actions + + + Not Allowed. + + + Only Selected Group (Export) + + + Owner + + + Reload + + + Search For {0} Extended Attributes + + + Striped + + + Type + + + Value + + + you + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.it.resx b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.it.resx new file mode 100644 index 0000000..4fb941f --- /dev/null +++ b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.it.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Azioni + + + All Groups + + + Bordered + + + Crea + + + Cancella + + + Delete Extended Attribute? + + + Dense + + + Descrizione + + + Modifica + + + Entity Id + + + Esporta + + + Extended Attributes exported + + + External Id + + + Filtered Extended Attributes exported + + + Gruppo + + + Id + + + Include Entity fields (Export) + + + Attivo + + + Key + + + Manage {0} Extended Attributes + + + Manage {0} {1}'s Extended Attributes + + + Nessuna azione è consentita + + + Non consentito + + + Solo il gruppo selezionato (Export) + + + Owner + + + Ricarica + + + Search For {0} Extended Attributes + + + Striped + + + Tipo + + + Valore + + + you + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.km.resx b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.km.resx new file mode 100644 index 0000000..a88e072 --- /dev/null +++ b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.km.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + សកម្មភាព + + + ក្រុមទាំងអស់ + + + ព្រុំព្រទល់ + + + បង្កើត + + + លុប + + + លុបជួរឈរបន្ថែម? + + + បង្រួម + + + ពិពណ៌នា + + + កែប្រែ + + + Entity Id + + + នាំចេញ + + + ជួរឈរបន្ថែមនាំចេញ + + + External Id + + + ច្រោះជួរឈរបន្ថែមនាំចេញ + + + ក្រុម + + + Id + + + Include Entity fields (Export) + + + គឺសកម្ម + + + Key + + + Manage {0} Extended Attributes + + + Manage {0} {1}'s Extended Attributes + + + មិនត្រូវបានអនុញ្ញាត + + + មិនអនុញ្ញាត្ត + + + Only Selected Group (Export) + + + ម្ចាស់ + + + ផ្ទុកឡើងវិញ + + + Search For {0} Extended Attributes + + + Striped + + + ប្រភេទ + + + តម្លៃ + + + you + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.nl.resx b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.nl.resx new file mode 100644 index 0000000..b54e93e --- /dev/null +++ b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.nl.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acties + + + Alle groepen + + + Grenst aan + + + Aanmaken + + + Verwijderen + + + Uitgebreid kenmerk verwijderen? + + + Dicht + + + Beschrijving + + + Bewerken + + + Entiteits-id + + + Exporteren + + + Geëxporteerde uitgebreide kenmerken + + + Externe id + + + Gefilterde uitgebreide kenmerken geëxporteerd + + + Groep + + + Id + + + Entiteitsvelden opnemen (exporteren) + + + Is actief + + + Sleutel + + + Uitgebreide kenmerken beheren {0} + + + Uitgebreide kenmerken van {0} {1} beheren + + + Geen toegestane acties + + + Niet toegestaan. + + + Alleen geselecteerde groep (exporteren) + + + Eigenaar + + + Herladen + + + Zoeken naar {0} uitgebreide kenmerken + + + Gestreept + + + Type + + + Waarde + + + jij + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.ru.resx b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.ru.resx new file mode 100644 index 0000000..7ec3a74 --- /dev/null +++ b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.ru.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Действия + + + Все группы + + + Обрамлённый + + + Создать + + + Удалить + + + Удалить расширенный атрибут? + + + Компактный + + + Описание + + + Редактировать + + + Id сущности + + + Экспорт в Excel + + + Расширенные атрибуты экспортированы + + + Внешний Id + + + Отфильтрованные расширенные атрибуты экспортированы + + + Группа + + + Id + + + Включить поля сущности (Экспорт) + + + Активный? + + + Ключ + + + Управление расширенными атрибутами {0} + + + Управление расширенными атрибутами {1} с Id = {0} + + + Нет доступных действий + + + Нет доступа. + + + Только выбранную группу (Экспорт) + + + Владелец + + + Перезагрузить + + + Поиск расширенных атрибутов {0} + + + Чередующийся + + + Тип + + + Значение + + + Вы + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.sv.resx b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.sv.resx new file mode 100644 index 0000000..4270e95 --- /dev/null +++ b/src/Client/Resources/Shared/Components/ExtendedAttributesLocalization.sv.resx @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + All Groups + + + Bordered + + + Create + + + Delete + + + Delete Extended Attribute? + + + Dense + + + Description + + + Edit + + + Entity Id + + + Export + + + Extended Attributes exported + + + External Id + + + Filtered Extended Attributes exported + + + Group + + + Id + + + Include Entity fields (Export) + + + Is Active + + + Key + + + Manage {0} Extended Attributes + + + Manage {0} {1}'s Extended Attributes + + + No Allowed Actions + + + Not Allowed. + + + Only Selected Group (Export) + + + Owner + + + Reload + + + Search For {0} Extended Attributes + + + Striped + + + Type + + + Value + + + you + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ImportExcelModal.ar.resx b/src/Client/Resources/Shared/Components/ImportExcelModal.ar.resx new file mode 100644 index 0000000..23dee1b --- /dev/null +++ b/src/Client/Resources/Shared/Components/ImportExcelModal.ar.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + إلغاء + + + استيراد + + + الرجاء رفع ملف اكسل! + + + رفع + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ImportExcelModal.de.resx b/src/Client/Resources/Shared/Components/ImportExcelModal.de.resx new file mode 100644 index 0000000..fd884a0 --- /dev/null +++ b/src/Client/Resources/Shared/Components/ImportExcelModal.de.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Abbrechen + + + Importieren + + + Bitte lade eine Excel-Datei hoch! + + + Hochladen + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ImportExcelModal.en.resx b/src/Client/Resources/Shared/Components/ImportExcelModal.en.resx new file mode 100644 index 0000000..7d6c332 --- /dev/null +++ b/src/Client/Resources/Shared/Components/ImportExcelModal.en.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancel + + + Import + + + Please upload excel file! + + + Upload + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ImportExcelModal.es.resx b/src/Client/Resources/Shared/Components/ImportExcelModal.es.resx new file mode 100644 index 0000000..cb3b505 --- /dev/null +++ b/src/Client/Resources/Shared/Components/ImportExcelModal.es.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancelar + + + Importar + + + Por favor subar el archivo Excel! + + + Subir + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ImportExcelModal.fr.resx b/src/Client/Resources/Shared/Components/ImportExcelModal.fr.resx new file mode 100644 index 0000000..eece67a --- /dev/null +++ b/src/Client/Resources/Shared/Components/ImportExcelModal.fr.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annuler + + + Importer + + + Merci de téléverser un fichier excel ! + + + Téléverser + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ImportExcelModal.id.resx b/src/Client/Resources/Shared/Components/ImportExcelModal.id.resx new file mode 100644 index 0000000..7d6c332 --- /dev/null +++ b/src/Client/Resources/Shared/Components/ImportExcelModal.id.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancel + + + Import + + + Please upload excel file! + + + Upload + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ImportExcelModal.it.resx b/src/Client/Resources/Shared/Components/ImportExcelModal.it.resx new file mode 100644 index 0000000..7d6c332 --- /dev/null +++ b/src/Client/Resources/Shared/Components/ImportExcelModal.it.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancel + + + Import + + + Please upload excel file! + + + Upload + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ImportExcelModal.km.resx b/src/Client/Resources/Shared/Components/ImportExcelModal.km.resx new file mode 100644 index 0000000..7d6c332 --- /dev/null +++ b/src/Client/Resources/Shared/Components/ImportExcelModal.km.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancel + + + Import + + + Please upload excel file! + + + Upload + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ImportExcelModal.nl.resx b/src/Client/Resources/Shared/Components/ImportExcelModal.nl.resx new file mode 100644 index 0000000..719c7eb --- /dev/null +++ b/src/Client/Resources/Shared/Components/ImportExcelModal.nl.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annuleren + + + Importeren + + + Upload excel-bestand! + + + Uploaden + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ImportExcelModal.ru.resx b/src/Client/Resources/Shared/Components/ImportExcelModal.ru.resx new file mode 100644 index 0000000..6cbf650 --- /dev/null +++ b/src/Client/Resources/Shared/Components/ImportExcelModal.ru.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Отмена + + + Импорт + + + Пожалуйста, загрузите excel файл! + + + Загрузить + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/ImportExcelModal.sv.resx b/src/Client/Resources/Shared/Components/ImportExcelModal.sv.resx new file mode 100644 index 0000000..7d6c332 --- /dev/null +++ b/src/Client/Resources/Shared/Components/ImportExcelModal.sv.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancel + + + Import + + + Please upload excel file! + + + Upload + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/LanguageSelector.ar.resx b/src/Client/Resources/Shared/Components/LanguageSelector.ar.resx new file mode 100644 index 0000000..5ab4357 --- /dev/null +++ b/src/Client/Resources/Shared/Components/LanguageSelector.ar.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Dutch - Netherlands + + + English + + + French + + + German + + + Indonesia + + + Italian + + + Khmer + + + Russian + + + Spanish + + + Swedish + + + عربي + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/LanguageSelector.de.resx b/src/Client/Resources/Shared/Components/LanguageSelector.de.resx new file mode 100644 index 0000000..0b8081b --- /dev/null +++ b/src/Client/Resources/Shared/Components/LanguageSelector.de.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Niederländisch - Nederland + + + Englisch - English + + + Französisch - Français + + + Deutsch + + + Indonesisch - bahasa Indonesia + + + Italienisch - Italiano + + + Khmer - ខ្មែរ + + + Russisch - русский + + + Spanisch - Español + + + Schwedisch - Svenska + + + Arabisch - عربي + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/LanguageSelector.en.resx b/src/Client/Resources/Shared/Components/LanguageSelector.en.resx new file mode 100644 index 0000000..5ab4357 --- /dev/null +++ b/src/Client/Resources/Shared/Components/LanguageSelector.en.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Dutch - Netherlands + + + English + + + French + + + German + + + Indonesia + + + Italian + + + Khmer + + + Russian + + + Spanish + + + Swedish + + + عربي + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/LanguageSelector.es.resx b/src/Client/Resources/Shared/Components/LanguageSelector.es.resx new file mode 100644 index 0000000..3c1f165 --- /dev/null +++ b/src/Client/Resources/Shared/Components/LanguageSelector.es.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Holandés - Holanda + + + Inglés + + + Francés + + + Alemán + + + Indonesia + + + Italiano + + + Jemer + + + Ruso + + + Español + + + Sueco + + + عربي + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/LanguageSelector.fr.resx b/src/Client/Resources/Shared/Components/LanguageSelector.fr.resx new file mode 100644 index 0000000..09a7e86 --- /dev/null +++ b/src/Client/Resources/Shared/Components/LanguageSelector.fr.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Dutch - Netherlands + + + Anglais + + + Français + + + Allemand + + + Indonésie + + + Italien + + + Jemer + + + Russe + + + Espanol + + + Suédois + + + عربي + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/LanguageSelector.id.resx b/src/Client/Resources/Shared/Components/LanguageSelector.id.resx new file mode 100644 index 0000000..e728993 --- /dev/null +++ b/src/Client/Resources/Shared/Components/LanguageSelector.id.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Dutch - Netherlands + + + Inggris + + + Perancis + + + Jerman + + + Indonesiano + + + Italia + + + Khmer + + + Rusia + + + Orang Spanyol + + + Orang Swedia + + + عربي + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/LanguageSelector.it.resx b/src/Client/Resources/Shared/Components/LanguageSelector.it.resx new file mode 100644 index 0000000..001bf81 --- /dev/null +++ b/src/Client/Resources/Shared/Components/LanguageSelector.it.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Dutch - Netherlands + + + Inglese + + + Francese + + + Tedesco + + + Indonesiano + + + Italiano + + + Khmer + + + Russo + + + Spagnolo + + + Svedese + + + عربي + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/LanguageSelector.nl.resx b/src/Client/Resources/Shared/Components/LanguageSelector.nl.resx new file mode 100644 index 0000000..5ab4357 --- /dev/null +++ b/src/Client/Resources/Shared/Components/LanguageSelector.nl.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Dutch - Netherlands + + + English + + + French + + + German + + + Indonesia + + + Italian + + + Khmer + + + Russian + + + Spanish + + + Swedish + + + عربي + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Components/LanguageSelector.ru.resx b/src/Client/Resources/Shared/Components/LanguageSelector.ru.resx new file mode 100644 index 0000000..9290d77 --- /dev/null +++ b/src/Client/Resources/Shared/Components/LanguageSelector.ru.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Голландский - Нидерланды + + + Английский + + + Французский + + + Немецкий + + + Индонезия + + + Итальянский + + + Кхмерский + + + Русский + + + Испанский + + + Шведский + + + عربي + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.en.resx b/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.en.resx new file mode 100644 index 0000000..ad5c1a2 --- /dev/null +++ b/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.en.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancel + + + Confirm + + + Delete Confirmation + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.es.resx b/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.es.resx new file mode 100644 index 0000000..83a4d45 --- /dev/null +++ b/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.es.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancelar + + + Confirmar + + + Confirmación de borrado + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.fr.resx b/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.fr.resx new file mode 100644 index 0000000..8aa2a1a --- /dev/null +++ b/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.fr.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annuler + + + Confirmer + + + Confirmation de suppression + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.id.resx b/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.id.resx new file mode 100644 index 0000000..33fd900 --- /dev/null +++ b/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.id.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Batal + + + Konfirmasi + + + Konfirmasi Hapus + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.it.resx b/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.it.resx new file mode 100644 index 0000000..a529978 --- /dev/null +++ b/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.it.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annulla + + + Conferma + + + Conferma eliminazione + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.km.resx b/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.km.resx new file mode 100644 index 0000000..819d5ff --- /dev/null +++ b/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.km.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + បោះបង់ + + + បញ្ជាក់ + + + បញ្ជាក់លុប + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.nl.resx b/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.nl.resx new file mode 100644 index 0000000..d9fdfce --- /dev/null +++ b/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.nl.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annuleren + + + Bevestig + + + Verwijder Bevestiging + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.ru.resx b/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.ru.resx new file mode 100644 index 0000000..7b147f7 --- /dev/null +++ b/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.ru.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Отмена + + + Подтвердить + + + Подтвержедние удаления + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.sv.resx b/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.sv.resx new file mode 100644 index 0000000..5a9a09f --- /dev/null +++ b/src/Client/Resources/Shared/Dialogs/DeleteConfirmation.sv.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Avbryt + + + Bekräfta + + + Radera bekräftelse + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Dialogs/Logout.en.resx b/src/Client/Resources/Shared/Dialogs/Logout.en.resx new file mode 100644 index 0000000..2bb3110 --- /dev/null +++ b/src/Client/Resources/Shared/Dialogs/Logout.en.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancel + + + Logout Confirmation + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Dialogs/Logout.es.resx b/src/Client/Resources/Shared/Dialogs/Logout.es.resx new file mode 100644 index 0000000..fa3257a --- /dev/null +++ b/src/Client/Resources/Shared/Dialogs/Logout.es.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cancelar + + + Confirmación de Salida + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Dialogs/Logout.fr.resx b/src/Client/Resources/Shared/Dialogs/Logout.fr.resx new file mode 100644 index 0000000..8cc6a39 --- /dev/null +++ b/src/Client/Resources/Shared/Dialogs/Logout.fr.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annuler + + + Confirmation de déconnexion + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Dialogs/Logout.id.resx b/src/Client/Resources/Shared/Dialogs/Logout.id.resx new file mode 100644 index 0000000..077f91a --- /dev/null +++ b/src/Client/Resources/Shared/Dialogs/Logout.id.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Batal + + + Konfirmasi Keluar + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Dialogs/Logout.it.resx b/src/Client/Resources/Shared/Dialogs/Logout.it.resx new file mode 100644 index 0000000..d2222c8 --- /dev/null +++ b/src/Client/Resources/Shared/Dialogs/Logout.it.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annulla + + + Conferma Logout + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Dialogs/Logout.km.resx b/src/Client/Resources/Shared/Dialogs/Logout.km.resx new file mode 100644 index 0000000..8438a5c --- /dev/null +++ b/src/Client/Resources/Shared/Dialogs/Logout.km.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + បោះបង់ + + + បញ្ជាក់ពីការចាកចេញពីប្រព័ន្ធ + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Dialogs/Logout.nl.resx b/src/Client/Resources/Shared/Dialogs/Logout.nl.resx new file mode 100644 index 0000000..01f52ed --- /dev/null +++ b/src/Client/Resources/Shared/Dialogs/Logout.nl.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Annuleren + + + Afmeldbevestiging + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Dialogs/Logout.ru.resx b/src/Client/Resources/Shared/Dialogs/Logout.ru.resx new file mode 100644 index 0000000..68a6131 --- /dev/null +++ b/src/Client/Resources/Shared/Dialogs/Logout.ru.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Отмена + + + Подтверждение выхода + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/Dialogs/Logout.sv.resx b/src/Client/Resources/Shared/Dialogs/Logout.sv.resx new file mode 100644 index 0000000..7ad76d8 --- /dev/null +++ b/src/Client/Resources/Shared/Dialogs/Logout.sv.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Avbryt + + + Bekräftelse För Utloggning + + \ No newline at end of file diff --git "a/src/Client/Resources/Shared/Dialogs/\342\200\217\342\200\217DeleteConfirmation.ar.resx" "b/src/Client/Resources/Shared/Dialogs/\342\200\217\342\200\217DeleteConfirmation.ar.resx" new file mode 100644 index 0000000..7172f86 --- /dev/null +++ "b/src/Client/Resources/Shared/Dialogs/\342\200\217\342\200\217DeleteConfirmation.ar.resx" @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + الغاء + + + تأكيد + + + تأكيد الحذف + + \ No newline at end of file diff --git "a/src/Client/Resources/Shared/Dialogs/\342\200\217\342\200\217Logout.ar.resx" "b/src/Client/Resources/Shared/Dialogs/\342\200\217\342\200\217Logout.ar.resx" new file mode 100644 index 0000000..c23d9df --- /dev/null +++ "b/src/Client/Resources/Shared/Dialogs/\342\200\217\342\200\217Logout.ar.resx" @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + الغاء + + + تأكيد الخروج + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/MainLayout.de.resx b/src/Client/Resources/Shared/MainLayout.de.resx new file mode 100644 index 0000000..819ef5a --- /dev/null +++ b/src/Client/Resources/Shared/MainLayout.de.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Konto + + + Kauf mir einen Kaffee! + + + Chat? + + + Community + + + Facebook-Gruppe + + + Facebook-Seite + + + Repository forken + + + Ausloggen + + + Möchtest du dich wirklich ausloggen? + + + MudBlazor-Dokumentation + + + Schnellstartanleitung + + + Token aktualisiert. + + + Ressourcen + + + Support + + + Umschalten zum dunklen Modus + + + Rechts nach Links / Links nach Rechts umschalten + + + Willkommen {0} + + + Du wurdest ausgeloggt, weil die Berechtigungen einer deine Rollen aktualisiert wurden. + + + Du wurdest ausgeloggt, weil der Benutzer mit deinem Token gelöscht wurde. + + + Bis bist ausgeloggt. + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/MainLayout.en.resx b/src/Client/Resources/Shared/MainLayout.en.resx new file mode 100644 index 0000000..ef2c7d0 --- /dev/null +++ b/src/Client/Resources/Shared/MainLayout.en.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Account + + + Buy Me A Coffee! + + + Chat? + + + Community + + + Facebook Group + + + Facebook Page + + + Fork Repository + + + Logout + + + Do you really want to Logout? + + + MudBlazor Documentation + + + Quick-Start Guide + + + Refreshed Token. + + + Resources + + + Support + + + Toggle Dark Mode + + + Toggle right-to-left/left-to-right + + + Welcome {0} + + + You are logged out because the Permissions of one of your Roles have been updated. + + + You are logged out because the user with your Token has been deleted. + + + You are Logged Out. + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/MainLayout.es.resx b/src/Client/Resources/Shared/MainLayout.es.resx new file mode 100644 index 0000000..79c64e9 --- /dev/null +++ b/src/Client/Resources/Shared/MainLayout.es.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cuenta + + + Buy Me A Coffee! + + + Chat? + + + Comunidad + + + Grupo de Facebook + + + Página de Facebook + + + Salir + + + ¿Realmente quiere salir del sistema? + + + Documentación de MudBlazor + + + Guía de Inicio Rápido + + + Token refrescado. + + + Recursos + + + Soporte + + + Alternar modo oscuro + + + Alternar right-to-left/left-to-right + + + Bienvenido {0} + + + Ha cerrado sesión porque los permisos de su Rol han sido actualizados. + + + Ha cerrado sesión porque el usuario asociado a su Token ha sido borrado. + + + Ha cerrado sesión. + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/MainLayout.fr.resx b/src/Client/Resources/Shared/MainLayout.fr.resx new file mode 100644 index 0000000..e3538b8 --- /dev/null +++ b/src/Client/Resources/Shared/MainLayout.fr.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Compte + + + Buy Me A Coffee! + + + Chatter ? + + + Communauté + + + Grouppe Facebook + + + Page Facebook + + + Forker le dépôt + + + Déconnexion + + + Voulez-vous vraiment vous déconnecter ? + + + Documentation MudBlazor + + + Guide de démarrage rapide + + + Jeton raffraîchi + + + Ressources + + + Support + + + Basculer le mode sombre / mode clair + + + Basculer affichage gauche-droite / droite-gauche + + + Bienvenu {0} + + + Vous avez été déconnecté car les permissions de l'un de vos rôles ont été mise à jour. + + + Vous avez été déconnecté car l'utilisateur lié au jeton a été supprimé. + + + Vous êtes déconnecté. + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/MainLayout.id.resx b/src/Client/Resources/Shared/MainLayout.id.resx new file mode 100644 index 0000000..33714f0 --- /dev/null +++ b/src/Client/Resources/Shared/MainLayout.id.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Akun + + + Buy Me A Coffee! + + + Chat? + + + Komunitas + + + Grup Facebook + + + Halaman Facebook + + + Fork Repository + + + Keluar + + + Apakah anda yakin ingin Keluar? + + + Dokumentasi MudBlazor + + + Panduan Awal Singkat + + + Refreshed Token. + + + Resources + + + Dukung + + + Toggle Mode Gelap + + + Toggle right-to-left/left-to-right + + + Selamat Datang {0} + + + You are logged out because the Permissions of one of your Roles have been updated. + + + You are logged out because the user with your Token has been deleted. + + + You are Logged Out. + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/MainLayout.it.resx b/src/Client/Resources/Shared/MainLayout.it.resx new file mode 100644 index 0000000..5140d04 --- /dev/null +++ b/src/Client/Resources/Shared/MainLayout.it.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Account + + + Buy Me A Coffee! + + + Chat? + + + Community + + + Gruppo Facebook + + + Pagina Facebook + + + Fork Repository + + + Logout + + + Vuoi effettuare il Logout? + + + Documentazione MudBlazor + + + Guida rapida + + + Refreshed Token. + + + Risorse + + + Supporto + + + Attiva la modalità scura + + + Toggle right-to-left/left-to-right + + + Benvenuto {0} + + + You are logged out because the Permissions of one of your Roles have been updated. + + + You are logged out because the user with your Token has been deleted. + + + You are Logged Out. + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/MainLayout.km.resx b/src/Client/Resources/Shared/MainLayout.km.resx new file mode 100644 index 0000000..227e366 --- /dev/null +++ b/src/Client/Resources/Shared/MainLayout.km.resx @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + គណនី + + + ទិញកាហ្វេមួយមក! + + + ឆាត? + + + សហគមន៍ + + + ក្រុមហ្វេសប៊ុក + + + ទំព័រហ្វេសប៊ុក + + + ចាកចេញ + + + តើអ្នកពិតជាចង់ចាកចេញមែនទេ? + + + ឯកសារ MudBlazor + + + ម​គ្គុ​ទេស​ក៍​ចាប់​ផ្តើ​ម​រហ័ស + + + Refreshed Token. + + + ធនធាន + + + គាំទ្រ + + + បិទ / បើកស្បែកងងឹត + + + Toggle right-to-left/left-to-right + + + ស្វាគមន៏ {0} + + + អ្នកត្រូវបានចាកចេញពីប្រព័ន្ធព្រោះសិទ្ធិនៃមុខងារបស់អ្នកត្រូវបានធ្វើបច្ចុប្បន្នភាព + + + អ្នកត្រូវបានចាកចេញពីប្រព័ន្ធព្រោះកូដធូឃីនអ្នកត្រូវបានលុប + + + អ្នកត្រូវបានចាកចេញ + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/MainLayout.nl.resx b/src/Client/Resources/Shared/MainLayout.nl.resx new file mode 100644 index 0000000..9cbbf9e --- /dev/null +++ b/src/Client/Resources/Shared/MainLayout.nl.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Account + + + Koop me een koffie! + + + Chatten? + + + Community + + + Facebook Groep + + + Facebook Pagina + + + Fork Repository + + + Uitloggen + + + Wil je echt uitloggen? + + + MudBlazor Documentation + + + Snelstartgids + + + Vernieuwd Token. + + + Bronnen + + + Ondersteuning + + + Donkere Modus Schakelen + + + Wissel van rechts naar links/links naar rechts + + + Welkom {0} + + + U bent uitgelogd omdat de machtigingen van een van uw rollen zijn bijgewerkt. + + + U bent uitgelogd omdat de gebruiker met uw Token is verwijderd. + + + U bent uitgelogd. + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/MainLayout.ru.resx b/src/Client/Resources/Shared/MainLayout.ru.resx new file mode 100644 index 0000000..1fee9c5 --- /dev/null +++ b/src/Client/Resources/Shared/MainLayout.ru.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Аккаунт + + + Купить мне кофе! + + + К чату? + + + Сообщество + + + Группа Facebook + + + Страница Facebook + + + Репозиторий + + + Выйти + + + Подтверждение выхода + + + Документация MudBlazor + + + Краткое руководство пользователя + + + Токен обновлён. + + + Ресурсы + + + Поддержка + + + Переключить Тёмный режим + + + Переключить справа-на-лево/слева-на-право + + + Добро пожаловать {0} + + + Вы вышли из системы, потому что были обновлены разрешения одной из ваших ролей. + + + Вы вышли из системы, потому что пользователь с вашим токеном был удален. + + + Вы вышли из системы. + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/MainLayout.sv.resx b/src/Client/Resources/Shared/MainLayout.sv.resx new file mode 100644 index 0000000..d66bc71 --- /dev/null +++ b/src/Client/Resources/Shared/MainLayout.sv.resx @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Konto + + + Buy Me A Coffee! + + + Chat? + + + Community + + + Facebook Grupp + + + Facebook Sida + + + Fork Repository + + + Logga ut + + + Vill du verkligen logga ut? + + + MudBlazor Dokumentation + + + Snabbstart Guide + + + Refreshed Token. + + + Resurser + + + Support + + + Växla Mörktläge + + + Toggle right-to-left/left-to-right + + + Välkommen {0} + + + You are logged out because the Permissions of one of your Roles have been updated. + + + You are logged out because the user with your Token has been deleted. + + + You are Logged Out. + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NavMenu.de.resx b/src/Client/Resources/Shared/NavMenu.de.resx new file mode 100644 index 0000000..8bd8b09 --- /dev/null +++ b/src/Client/Resources/Shared/NavMenu.de.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Konto + + + Administrator + + + Marken + + + Katalog + + + Chat + + + Kommunikation + + + Dashboard + + + Dokumentenverwaltung + + + Dokumentenspeicher + + + Documenttypen + + + FAQs + + + Merkmale + + + Start + + + Protokolle + + + E-Mail + + + Persönlich + + + Produkte + + + Schnellstartanleitung + + + Ressourcen + + + Rollen + + + Swagger + + + Benutzer + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NavMenu.en.resx b/src/Client/Resources/Shared/NavMenu.en.resx new file mode 100644 index 0000000..61adb32 --- /dev/null +++ b/src/Client/Resources/Shared/NavMenu.en.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Account + + + Administrator + + + Brands + + + Catalog + + + Chat + + + Communication + + + Dashboard + + + Document Management + + + Document Store + + + Document Types + + + FAQs + + + Features + + + Home + + + Logs + + + Mail + + + Personal + + + Products + + + Quick Start Guide + + + Resources + + + Roles + + + Swagger + + + Users + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NavMenu.es.resx b/src/Client/Resources/Shared/NavMenu.es.resx new file mode 100644 index 0000000..6bfbf6e --- /dev/null +++ b/src/Client/Resources/Shared/NavMenu.es.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Cuenta + + + Administrador + + + Auditoría + + + Marcas + + + Gestión de catálogo + + + Chat + + + Comunicaciones + + + Panel de Control + + + Administración de Documentos + + + Almacén de Documentos + + + Tipos de Documentos + + + FAQs + + + Características + + + Inicio + + + Mail + + + Personal + + + Productos + + + Guía de Inicio Rápido + + + Recursos + + + Roles + + + Swagger + + + Usuarios + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NavMenu.fr.resx b/src/Client/Resources/Shared/NavMenu.fr.resx new file mode 100644 index 0000000..b888549 --- /dev/null +++ b/src/Client/Resources/Shared/NavMenu.fr.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Compte + + + Administrateur + + + Pistes d'audit + + + Marques + + + Gestion du catalogue + + + Conversations + + + Communication + + + Tableau de bord + + + Gestion des documents + + + Stockage des documents + + + Types de documents + + + FAQ + + + Fonctionnalités + + + Accueil + + + Courriel + + + Renseignements personnels + + + Produits + + + Guide de démarrage rapide + + + Ressources + + + Rôles + + + Swagger + + + Utilisateurs + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NavMenu.id.resx b/src/Client/Resources/Shared/NavMenu.id.resx new file mode 100644 index 0000000..5240880 --- /dev/null +++ b/src/Client/Resources/Shared/NavMenu.id.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Akun + + + Administrator + + + Audit Trails + + + Merek + + + Manajemen Katalog + + + Obrolan + + + Komunikasi + + + Dasbor + + + Document Management + + + Document Store + + + Document Types + + + FAQs + + + Fitur + + + Beranda + + + Mail + + + Personal + + + Produk + + + Panduan Awal Singkat + + + Resources + + + Wewenang + + + Swagger + + + Pengguna + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NavMenu.it.resx b/src/Client/Resources/Shared/NavMenu.it.resx new file mode 100644 index 0000000..371cd91 --- /dev/null +++ b/src/Client/Resources/Shared/NavMenu.it.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Account + + + Amministratore + + + Marche + + + Gestione catalogo + + + Chat + + + Comunicazione + + + Dashboard + + + Document Management + + + Archivio documenti + + + Document Types + + + FAQs + + + Caratteristiche + + + Home + + + Registro Attività + + + Mail + + + Personale + + + Prodotti + + + Guida rapida + + + Risorse + + + Ruoli + + + Swagger + + + Utenti + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NavMenu.km.resx b/src/Client/Resources/Shared/NavMenu.km.resx new file mode 100644 index 0000000..01df5e7 --- /dev/null +++ b/src/Client/Resources/Shared/NavMenu.km.resx @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + គណនី + + + រដ្ឋបាល + + + ផលិតផល + + + គ្រប់គ្រងកាតាឡុក + + + ទំនាក់ទំនង + + + ការគ្រប់គ្រងឯកសារ + + + ប្រភេទឯកសារ + + + កម្រងសំណួរចម្លើយ + + + មុខងារ + + + ទំព័រដើម + + + ឯកជន + + + ផលិតផល + + + ធនធាន + + + សិទ្ធិប្រើប្រាស់ + + + អ្នកប្រើប្រាស់ + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NavMenu.nl.resx b/src/Client/Resources/Shared/NavMenu.nl.resx new file mode 100644 index 0000000..30d1ce8 --- /dev/null +++ b/src/Client/Resources/Shared/NavMenu.nl.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Account + + + Administrator + + + Audit Trails + + + Merken + + + Catalogusbeheer + + + Chat + + + Communicatie + + + Dashboard + + + Documentbeheer + + + Documentopslag + + + Documenttypen + + + FAQs + + + Functies + + + Hoofdscherm + + + Mail + + + Persoonlijk + + + Producten + + + Snelstartgids + + + Bronnen + + + Rollen + + + Swagger + + + Gebruikers + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NavMenu.ru.resx b/src/Client/Resources/Shared/NavMenu.ru.resx new file mode 100644 index 0000000..253d25a --- /dev/null +++ b/src/Client/Resources/Shared/NavMenu.ru.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Аккаунт + + + Администрирование + + + Журналы аудита + + + Бренды + + + Управление каталогом + + + Чат + + + Коммуникации + + + Dashboard + + + Управление документами + + + Хранилище документов + + + Типы документов + + + FAQ + + + Функции + + + Домашняя + + + Почта + + + Персональные данные + + + Продукты + + + Краткое руководство пользователя + + + Ресурсы + + + Роли + + + Swagger + + + Пользователи + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NavMenu.sv.resx b/src/Client/Resources/Shared/NavMenu.sv.resx new file mode 100644 index 0000000..d85fdd1 --- /dev/null +++ b/src/Client/Resources/Shared/NavMenu.sv.resx @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Konto + + + Administratör + + + Audit Trails + + + Märken + + + Kataloghantering + + + Chatt + + + Kommunikation + + + Översikt + + + Document Management + + + Dokumentlagring + + + Document Types + + + FAQs + + + Funktioner + + + Hem + + + Mail + + + Personal + + + Produkter + + + Snabbstart Guide + + + Resurser + + + Roler + + + Swagger + + + Användare + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NotFoundLayout.de.resx b/src/Client/Resources/Shared/NotFoundLayout.de.resx new file mode 100644 index 0000000..15b332f --- /dev/null +++ b/src/Client/Resources/Shared/NotFoundLayout.de.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Zur Startseite gehen! + + + Die gesuchte Seite existiert nicht! + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NotFoundLayout.en.resx b/src/Client/Resources/Shared/NotFoundLayout.en.resx new file mode 100644 index 0000000..3b95741 --- /dev/null +++ b/src/Client/Resources/Shared/NotFoundLayout.en.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Go Home! + + + The page you were looking for doesn't exist. + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NotFoundLayout.es.resx b/src/Client/Resources/Shared/NotFoundLayout.es.resx new file mode 100644 index 0000000..8cda145 --- /dev/null +++ b/src/Client/Resources/Shared/NotFoundLayout.es.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ir a Inicio! + + + La página que busca no existe + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NotFoundLayout.fr.resx b/src/Client/Resources/Shared/NotFoundLayout.fr.resx new file mode 100644 index 0000000..c0d6d60 --- /dev/null +++ b/src/Client/Resources/Shared/NotFoundLayout.fr.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Revenir à l'accueil + + + La page que vous recherchez n'existe pas. + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NotFoundLayout.id.resx b/src/Client/Resources/Shared/NotFoundLayout.id.resx new file mode 100644 index 0000000..1b922b7 --- /dev/null +++ b/src/Client/Resources/Shared/NotFoundLayout.id.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Kembali ke Beranda! + + + Halaman yang anda tuju tidak tersedia. + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NotFoundLayout.it.resx b/src/Client/Resources/Shared/NotFoundLayout.it.resx new file mode 100644 index 0000000..5f231c6 --- /dev/null +++ b/src/Client/Resources/Shared/NotFoundLayout.it.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Vai alla Home! + + + La pagina che stavi cercando non esiste. + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NotFoundLayout.km.resx b/src/Client/Resources/Shared/NotFoundLayout.km.resx new file mode 100644 index 0000000..b6c6f4b --- /dev/null +++ b/src/Client/Resources/Shared/NotFoundLayout.km.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ទៅទំព័រដើម! + + + ទំព័រដែលអ្នកមកកាន់នេះគឺពុំមានទេ! + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NotFoundLayout.nl.resx b/src/Client/Resources/Shared/NotFoundLayout.nl.resx new file mode 100644 index 0000000..39ea8d9 --- /dev/null +++ b/src/Client/Resources/Shared/NotFoundLayout.nl.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Ga naar hoofdpagina + + + De pagina die u zocht bestaat niet + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NotFoundLayout.ru.resx b/src/Client/Resources/Shared/NotFoundLayout.ru.resx new file mode 100644 index 0000000..506a4d9 --- /dev/null +++ b/src/Client/Resources/Shared/NotFoundLayout.ru.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + На домашнюю страницу! + + + Страница, которую вы искали, не существует. + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/NotFoundLayout.sv.resx b/src/Client/Resources/Shared/NotFoundLayout.sv.resx new file mode 100644 index 0000000..e49cb97 --- /dev/null +++ b/src/Client/Resources/Shared/NotFoundLayout.sv.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Till Start! + + + Sidan du letar efter finns inte. + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/SharedResource.de.resx b/src/Client/Resources/Shared/SharedResource.de.resx new file mode 100644 index 0000000..c6de4f5 --- /dev/null +++ b/src/Client/Resources/Shared/SharedResource.de.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Aktionen + + + Fortgeschrittene Suche + + + Marke + + + Abbrechen + + + Erstellen + + + Bearbeiten + + + Produkt + + + Produkte + + + Neu laden + + + Suche nach + + + Aktualisieren + + + Benutzer + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/SharedResource.en.resx b/src/Client/Resources/Shared/SharedResource.en.resx new file mode 100644 index 0000000..4ced943 --- /dev/null +++ b/src/Client/Resources/Shared/SharedResource.en.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Actions + + + Advanced Search + + + Brand + + + Cancel + + + Create + + + Edit + + + Product + + + Products + + + Reload + + + Search for + + + Update + + + User + + \ No newline at end of file diff --git a/src/Client/Resources/Shared/SharedResource.it.resx b/src/Client/Resources/Shared/SharedResource.it.resx new file mode 100644 index 0000000..310e16e --- /dev/null +++ b/src/Client/Resources/Shared/SharedResource.it.resx @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Azioni + + + Ricerca avanzata + + + Marchio + + + Annulla + + + Crea + + + Modifica + + + Prodotto + + + Prodotti + + + Ricarica + + + Ricerca per + + + Aggiorna + + + Utente + + \ No newline at end of file diff --git "a/src/Client/Resources/Shared/\342\200\217\342\200\217MainLayout.ar.resx" "b/src/Client/Resources/Shared/\342\200\217\342\200\217MainLayout.ar.resx" new file mode 100644 index 0000000..55bb1c9 --- /dev/null +++ "b/src/Client/Resources/Shared/\342\200\217\342\200\217MainLayout.ar.resx" @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + الحساب + + + اشتري لي قهوة! + + + دردشة؟ + + + تواصل اجتماعي + + + مجموعة الفيسبوك + + + صفحة الفيسبوك + + + نسخ الشوكة + + + تسجيل خروج + + + هل تريد حقًا تسجيل الخروج؟ + + + توثيق MudBlazor + + + دليل البدء السريع + + + Rرمز محدث. + + + الموارد + + + الدعم + + + تبديل الوضع الداكن + + + التبديل من اليمين إلى اليسار / من اليسار إلى اليمين + + + مرحبًا {0} + + + لقد تم تسجيل خروجك لأنه تم تحديث أذونات أحد الأدوار الخاصة بك. + + + لقد تم تسجيل خروجك لأنه تم حذف المستخدم الذي يحمل الرمز المميز الخاص بك. + + + لقد قمت بتسجيل الخروج. + + \ No newline at end of file diff --git "a/src/Client/Resources/Shared/\342\200\217\342\200\217NavMenu.ar.resx" "b/src/Client/Resources/Shared/\342\200\217\342\200\217NavMenu.ar.resx" new file mode 100644 index 0000000..50ba92e --- /dev/null +++ "b/src/Client/Resources/Shared/\342\200\217\342\200\217NavMenu.ar.resx" @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + الحساب + + + الإدارة + + + مسارات المراجعة + + + العلامات التجارية + + + إدارة الكتالوج + + + الدردشة + + + التواصل + + + لوحة الإدارة + + + إدارة المستندات + + + مخزن المستندات + + + أنواع المستندات + + + أسئلة وأجوبة + + + سمات + + + الصفحة الرئيسية + + + بريد + + + شخصي + + + المنتجات + + + دليل البدء السريع + + + الموارد + + + الأدوار + + + Swagger + + + المستخدمون + + \ No newline at end of file diff --git "a/src/Client/Resources/Shared/\342\200\217\342\200\217NotFoundLayout.ar.resx" "b/src/Client/Resources/Shared/\342\200\217\342\200\217NotFoundLayout.ar.resx" new file mode 100644 index 0000000..fa752e5 --- /dev/null +++ "b/src/Client/Resources/Shared/\342\200\217\342\200\217NotFoundLayout.ar.resx" @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + الذهاب للرئيسية! + + + الصفحة التي تبحث عنها غير موجودة. + + \ No newline at end of file diff --git a/src/Client/Shared/ApiHelper.cs b/src/Client/Shared/ApiHelper.cs new file mode 100644 index 0000000..8f82b78 --- /dev/null +++ b/src/Client/Shared/ApiHelper.cs @@ -0,0 +1,86 @@ +using RewardsPlus.BlazorWebAssembly.Client.Components.Common; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Shared; + +public static class ApiHelper +{ + public static async Task ExecuteCallGuardedAsync( + Func> call, + ISnackbar snackbar, + CustomValidation? customValidation = null, + string? successMessage = null) + { + customValidation?.ClearErrors(); + try + { + var result = await call(); + + if (!string.IsNullOrWhiteSpace(successMessage)) + { + snackbar.Add(successMessage, Severity.Info); + } + + return result; + } + catch (ApiException ex) + { + if (ex.Result.Errors is not null) + { + customValidation?.DisplayErrors(ex.Result.Errors); + } + else + { + snackbar.Add("Something went wrong!", Severity.Error); + } + } + catch (ApiException ex) + { + snackbar.Add(ex.Result.Exception, Severity.Error); + } + catch (Exception ex) + { + snackbar.Add(ex.Message, Severity.Error); + } + + return default; + } + + public static async Task ExecuteCallGuardedAsync( + Func call, + ISnackbar snackbar, + CustomValidation? customValidation = null, + string? successMessage = null) + { + customValidation?.ClearErrors(); + try + { + await call(); + + if (!string.IsNullOrWhiteSpace(successMessage)) + { + snackbar.Add(successMessage, Severity.Success); + } + + return true; + } + catch (ApiException ex) + { + if (ex.Result.Errors is not null) + { + customValidation?.DisplayErrors(ex.Result.Errors); + } + else + { + snackbar.Add("Something went wrong!", Severity.Error); + } + } + catch (ApiException ex) + { + snackbar.Add(ex.Result.Exception, Severity.Error); + } + + return false; + } +} \ No newline at end of file diff --git a/src/Client/Shared/BaseLayout.razor b/src/Client/Shared/BaseLayout.razor new file mode 100644 index 0000000..9eaabaa --- /dev/null +++ b/src/Client/Shared/BaseLayout.razor @@ -0,0 +1,33 @@ +@inherits LayoutComponentBase + + + + + + + + + + + + + + @Body + + + + + + + + + + @Body + + + + + + \ No newline at end of file diff --git a/src/Client/Shared/BaseLayout.razor.cs b/src/Client/Shared/BaseLayout.razor.cs new file mode 100644 index 0000000..0bb3d81 --- /dev/null +++ b/src/Client/Shared/BaseLayout.razor.cs @@ -0,0 +1,49 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Preferences; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Theme; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Shared; + +public partial class BaseLayout +{ + private ClientPreference? _themePreference; + private MudTheme _currentTheme = new LightTheme(); + private bool _themeDrawerOpen; + private bool _rightToLeft; + + protected override async Task OnInitializedAsync() + { + _themePreference = await ClientPreferences.GetPreference() as ClientPreference; + if (_themePreference == null) _themePreference = new ClientPreference(); + SetCurrentTheme(_themePreference); + + Snackbar.Add("Like this boilerplate? ", Severity.Normal, config => + { + config.BackgroundBlurred = true; + config.Icon = Icons.Custom.Brands.GitHub; + config.Action = "Star us on Github!"; + config.ActionColor = Color.Primary; + config.Onclick = snackbar => + { + Navigation.NavigateTo("https://github.com/fullstackhero/blazor-wasm-boilerplate"); + return Task.CompletedTask; + }; + }); + } + + private async Task ThemePreferenceChanged(ClientPreference themePreference) + { + SetCurrentTheme(themePreference); + await ClientPreferences.SetPreference(themePreference); + } + + private void SetCurrentTheme(ClientPreference themePreference) + { + _currentTheme = themePreference.IsDarkMode ? new DarkTheme() : new LightTheme(); + _currentTheme.Palette.Primary = themePreference.PrimaryColor; + _currentTheme.Palette.Secondary = themePreference.SecondaryColor; + _currentTheme.LayoutProperties.DefaultBorderRadius = $"{themePreference.BorderRadius}px"; + _currentTheme.LayoutProperties.DefaultBorderRadius = $"{themePreference.BorderRadius}px"; + _rightToLeft = themePreference.IsRTL; + } +} \ No newline at end of file diff --git a/src/Client/Shared/DialogServiceExtensions.cs b/src/Client/Shared/DialogServiceExtensions.cs new file mode 100644 index 0000000..ccd6dd2 --- /dev/null +++ b/src/Client/Shared/DialogServiceExtensions.cs @@ -0,0 +1,19 @@ +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Shared; + +public static class DialogServiceExtensions +{ + public static Task ShowModalAsync(this IDialogService dialogService, DialogParameters parameters) + where TDialog : ComponentBase => + dialogService.ShowModal(parameters).Result; + + public static IDialogReference ShowModal(this IDialogService dialogService, DialogParameters parameters) + where TDialog : ComponentBase + { + var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Medium, FullWidth = true, DisableBackdropClick = true }; + + return dialogService.Show(string.Empty, parameters, options); + } +} \ No newline at end of file diff --git a/src/Client/Shared/MainLayout.razor b/src/Client/Shared/MainLayout.razor new file mode 100644 index 0000000..7eec5df --- /dev/null +++ b/src/Client/Shared/MainLayout.razor @@ -0,0 +1,107 @@ +@inject IStringLocalizer L + + + + + + + @L["fullstackhero"] + + + + @L["Sponsor"] + + + + @L["Community"] + @L["Discord"] + @L["Facebook"] + + LinkedIn + Buy Me a Coffee! + + Open Collective + + @L["Resources"] + @L["Documentation"] + + + + + + + + + + + + + + +
+ + +
+ @L["Community"] + @L["Discord"] + @L["Facebook"] + + LinkedIn + @L["Resources"] + + @L["MudBlazor Documentation"] + + @L["Quick-Start Guide"] +
+ +
+ + + + + +
+ + +
+ + @L["Account"] +
+
+ +
+ + @L["Dashboard"] +
+
+
+ + Logout + +
+
+
+
+
+ + + + + + + + @ChildContent + + + + + \ No newline at end of file diff --git a/src/Client/Shared/MainLayout.razor.cs b/src/Client/Shared/MainLayout.razor.cs new file mode 100644 index 0000000..8eae587 --- /dev/null +++ b/src/Client/Shared/MainLayout.razor.cs @@ -0,0 +1,63 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Preferences; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace RewardsPlus.BlazorWebAssembly.Client.Shared; + +public partial class MainLayout +{ + [Parameter] + public RenderFragment ChildContent { get; set; } = default!; + [Parameter] + public EventCallback OnDarkModeToggle { get; set; } + [Parameter] + public EventCallback OnRightToLeftToggle { get; set; } + + private bool _drawerOpen; + private bool _rightToLeft; + + protected override async Task OnInitializedAsync() + { + if (await ClientPreferences.GetPreference() is ClientPreference preference) + { + _rightToLeft = preference.IsRTL; + _drawerOpen = preference.IsDrawerOpen; + } + } + + private async Task RightToLeftToggle() + { + bool isRtl = await ClientPreferences.ToggleLayoutDirectionAsync(); + _rightToLeft = isRtl; + + await OnRightToLeftToggle.InvokeAsync(isRtl); + } + + public async Task ToggleDarkMode() + { + await OnDarkModeToggle.InvokeAsync(); + } + + private async Task DrawerToggle() + { + _drawerOpen = await ClientPreferences.ToggleDrawerAsync(); + } + + private void Logout() + { + var parameters = new DialogParameters + { + { nameof(Dialogs.Logout.ContentText), $"{L["Logout Confirmation"]}"}, + { nameof(Dialogs.Logout.ButtonText), $"{L["Logout"]}"}, + { nameof(Dialogs.Logout.Color), Color.Error} + }; + + var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true }; + DialogService.Show(L["Logout"], parameters, options); + } + + private void Profile() + { + Navigation.NavigateTo("/account"); + } +} \ No newline at end of file diff --git a/src/Client/Shared/NavMenu.razor b/src/Client/Shared/NavMenu.razor new file mode 100644 index 0000000..9ccb1ba --- /dev/null +++ b/src/Client/Shared/NavMenu.razor @@ -0,0 +1,55 @@ +@inject IStringLocalizer L + + + + @L["Start"] + @L["Home"] + @L["Getting Started"] + @if (_canViewHangfire) + { + @L["Hangfire"] + } + @L["Personal"] + @if (_canViewDashboard) + { + @L["Dashboard"] + } + @L["Account"] + @L["Logs"] + @if (_canViewProducts || _canViewBrands) + { + @L["Management"] + + @if (_canViewProducts) + { + + @L["Products"] + + } + @if (_canViewBrands) + { + + @L["Brands"] + + } + + } + @if (CanViewAdministrationGroup) + { + @L["Administration"] + @if (_canViewUsers) + { + @L["Users"] + } + @if (_canViewRoles) + { + @L["Roles"] + } + @if(_canViewTenants) + { + @L["Tenants"] + } + } + \ No newline at end of file diff --git a/src/Client/Shared/NavMenu.razor.cs b/src/Client/Shared/NavMenu.razor.cs new file mode 100644 index 0000000..1329692 --- /dev/null +++ b/src/Client/Shared/NavMenu.razor.cs @@ -0,0 +1,39 @@ +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth; +using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Common; +using RewardsPlus.WebApi.Shared.Authorization; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Authorization; + +namespace RewardsPlus.BlazorWebAssembly.Client.Shared; + +public partial class NavMenu +{ + [CascadingParameter] + protected Task AuthState { get; set; } = default!; + [Inject] + protected IAuthorizationService AuthService { get; set; } = default!; + + private string? _hangfireUrl; + private bool _canViewHangfire; + private bool _canViewDashboard; + private bool _canViewRoles; + private bool _canViewUsers; + private bool _canViewProducts; + private bool _canViewBrands; + private bool _canViewTenants; + private bool CanViewAdministrationGroup => _canViewUsers || _canViewRoles || _canViewTenants; + + protected override async Task OnParametersSetAsync() + { + _hangfireUrl = Config[ConfigNames.ApiBaseUrl] + "jobs"; + var user = (await AuthState).User; + _canViewHangfire = await AuthService.HasPermissionAsync(user, FSHAction.View, FSHResource.Hangfire); + _canViewDashboard = await AuthService.HasPermissionAsync(user, FSHAction.View, FSHResource.Dashboard); + _canViewRoles = await AuthService.HasPermissionAsync(user, FSHAction.View, FSHResource.Roles); + _canViewUsers = await AuthService.HasPermissionAsync(user, FSHAction.View, FSHResource.Users); + _canViewProducts = await AuthService.HasPermissionAsync(user, FSHAction.View, FSHResource.Products); + _canViewBrands = await AuthService.HasPermissionAsync(user, FSHAction.View, FSHResource.Brands); + _canViewTenants = await AuthService.HasPermissionAsync(user, FSHAction.View, FSHResource.Tenants); + } +} \ No newline at end of file diff --git a/src/Client/Shared/NotFound.razor b/src/Client/Shared/NotFound.razor new file mode 100644 index 0000000..98c36fd --- /dev/null +++ b/src/Client/Shared/NotFound.razor @@ -0,0 +1,56 @@ +@using Infrastructure.Theme +@inherits LayoutComponentBase + + + + +
+ + + + + + + + + + + + + + + + + Not Found + +
+ Go Home +
+
+
+
+ +@code { + private MudTheme _currentTheme = new LightTheme(); + + protected override async Task OnInitializedAsync() + { + _currentTheme = new LightTheme(); + _currentTheme = await ClientPreferences.GetCurrentThemeAsync(); + } +} \ No newline at end of file diff --git a/src/Client/Shared/SharedResource.cs b/src/Client/Shared/SharedResource.cs new file mode 100644 index 0000000..6bca88c --- /dev/null +++ b/src/Client/Shared/SharedResource.cs @@ -0,0 +1,5 @@ +namespace RewardsPlus.BlazorWebAssembly.Client.Shared; + +public class SharedResource +{ +} diff --git a/src/Client/_Imports.razor b/src/Client/_Imports.razor new file mode 100644 index 0000000..da539ad --- /dev/null +++ b/src/Client/_Imports.razor @@ -0,0 +1,42 @@ +@using System.Security.Claims +@using Microsoft.AspNetCore.Authorization +@using Microsoft.AspNetCore.Components +@using Microsoft.AspNetCore.Components.Authorization +@using Microsoft.AspNetCore.Components.Forms +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.Web.Virtualization +@using Microsoft.AspNetCore.Components.WebAssembly.Authentication +@using Microsoft.AspNetCore.Components.WebAssembly.Http +@using Microsoft.AspNetCore.WebUtilities +@using Microsoft.Extensions.Configuration +@using Microsoft.Extensions.DependencyInjection +@using Microsoft.Extensions.Localization +@using Microsoft.JSInterop +@using RewardsPlus.BlazorWebAssembly.Client +@using RewardsPlus.BlazorWebAssembly.Client.Shared +@using RewardsPlus.BlazorWebAssembly.Client.Pages.Authentication +@using RewardsPlus.BlazorWebAssembly.Client.Pages.Multitenancy +@using RewardsPlus.BlazorWebAssembly.Client.Components.Common +@using RewardsPlus.BlazorWebAssembly.Client.Components.EntityTable +@using RewardsPlus.BlazorWebAssembly.Client.Components.Localization +@using RewardsPlus.BlazorWebAssembly.Client.Components.Notifications +@using RewardsPlus.BlazorWebAssembly.Client.Components.ThemeManager +@using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.ApiClient +@using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Auth +@using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Common +@using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Notifications +@using RewardsPlus.BlazorWebAssembly.Client.Infrastructure.Preferences +@using RewardsPlus.WebApi.Shared.Authorization +@using Blazored.LocalStorage +@using Mapster +@using MediatR.Courier +@using MudBlazor + +@attribute [Authorize] + +@inject NavigationManager Navigation +@inject ISnackbar Snackbar +@inject IDialogService DialogService +@inject IConfiguration Config +@inject IClientPreferenceManager ClientPreferences \ No newline at end of file diff --git a/src/Client/wwwroot/appsettings.Development.json b/src/Client/wwwroot/appsettings.Development.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/src/Client/wwwroot/appsettings.Development.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/Client/wwwroot/appsettings.json b/src/Client/wwwroot/appsettings.json new file mode 100644 index 0000000..704cf56 --- /dev/null +++ b/src/Client/wwwroot/appsettings.json @@ -0,0 +1,10 @@ +{ + "ApiBaseUrl": "https://localhost:5001/", + "AuthProvider": "Jwt", + "AzureAd": { + "Authority": "https://login.microsoftonline.com/organizations", + "ClientId": "", + "ValidateAuthority": true, + "ApiScope": "api:///access_as_user" + } +} \ No newline at end of file diff --git a/src/Client/wwwroot/css/fsh.css b/src/Client/wwwroot/css/fsh.css new file mode 100644 index 0000000..a44b634 --- /dev/null +++ b/src/Client/wwwroot/css/fsh.css @@ -0,0 +1,72 @@ +.fsh-center-text { + text-align: center !important; +} + +.mud-button-filled { + box-shadow: 0 3px 1px -2px rgb(0 0 0 / 30%), 0 2px 2px 0 rgb(0 0 0 / 0), 0 1px 5px 0 rgb(0 0 0 / 10%) !important; +} + +.mud-dialog { + box-shadow: 0 3px 1px -2px rgb(0 0 0 / 10%), 0 2px 2px 0 rgb(0 0 0 / 0), 0 10px 10px 0 rgb(0 0 0 / 5%) !important; +} + +.mud-nav-link { + white-space: normal !important; + padding: 12px 16px 12px 38px; +} + + .mud-nav-link.active:not(.mud-nav-link-disabled) { + border-right: 3px solid var(--mud-palette-primary); + background-color: rgba(var(--mud-palette-primary-rgb), 0.1); + } + +.mud-table { + padding: 20px !important; + margin-bottom: 20px !important; +} + +.mud-card { + margin-bottom: 20px !important; +} + +#blazor-error-ui { + color: var(--mud-palette-drawer-text); + background: var(--mud-palette-drawer-background); +} + +.mud-overlay-dark { + backdrop-filter: blur(2px); +} + +.mud-card-header .mud-card-header-avatar { + margin-inline-end: 10px !important; +} + +.mud-nav-link { + padding: 12px 16px 12px 15px !important; +} + +.mud-dialog-content { + max-height: 75vh !important; + overflow: auto !important; + overflow-x: hidden !important; +} + +.mud-grid-spacing-xs-3 { + margin: 0px !important; + margin-left: -12px !important; +} + +.mud-table-toolbar +{ + flex-wrap:wrap; + margin-bottom:20px!important; +} + +::-webkit-scrollbar { + width: 2px!important; + height: 6px!important; +} +.fsh-nav-child { + padding-left: 10px !important; +} \ No newline at end of file diff --git a/src/Client/wwwroot/favicon.ico b/src/Client/wwwroot/favicon.ico new file mode 100644 index 0000000..fd58c54 Binary files /dev/null and b/src/Client/wwwroot/favicon.ico differ diff --git a/src/Client/wwwroot/full-stack-hero-logo.png b/src/Client/wwwroot/full-stack-hero-logo.png new file mode 100644 index 0000000..05bdf45 Binary files /dev/null and b/src/Client/wwwroot/full-stack-hero-logo.png differ diff --git a/src/Client/wwwroot/index.html b/src/Client/wwwroot/index.html new file mode 100644 index 0000000..cc64e70 --- /dev/null +++ b/src/Client/wwwroot/index.html @@ -0,0 +1,110 @@ + + + + + + + Blazor WebAssembly Boilerplate + + + + + + + + + + + + +
+ + +
+
+
+
+
+ +
+
+
+ +
+ An unhandled error has occurred. + Reload + 🗙 +
+ + + + + + + + + \ No newline at end of file diff --git a/src/Client/wwwroot/manifest.json b/src/Client/wwwroot/manifest.json new file mode 100644 index 0000000..c95abce --- /dev/null +++ b/src/Client/wwwroot/manifest.json @@ -0,0 +1,21 @@ +{ + "name": "Blazor WebAssembly Boilerplate", + "short_name": "Blazor WebAssembly Boilerplate", + "start_url": "./", + "display": "standalone", + "background_color": "#ffffff", + "theme_color": "#3eaf7c", + "prefer_related_applications": false, + "icons": [ + { + "src": "full-stack-hero-logo.png", + "type": "image/png", + "sizes": "512x512" + }, + { + "src": "full-stack-hero-logo.png", + "type": "image/png", + "sizes": "192x192" + } + ] +} \ No newline at end of file diff --git a/src/Client/wwwroot/service-worker.js b/src/Client/wwwroot/service-worker.js new file mode 100644 index 0000000..0c4fa6b --- /dev/null +++ b/src/Client/wwwroot/service-worker.js @@ -0,0 +1,4 @@ +// In development, always fetch from the network and do not enable offline support. +// This is because caching would make development more difficult (changes would not +// be reflected on the first load after each change). +self.addEventListener('fetch', () => { }); \ No newline at end of file diff --git a/src/Client/wwwroot/service-worker.published.js b/src/Client/wwwroot/service-worker.published.js new file mode 100644 index 0000000..a88a6e9 --- /dev/null +++ b/src/Client/wwwroot/service-worker.published.js @@ -0,0 +1,48 @@ +// Caution! Be sure you understand the caveats before publishing an application with +// offline support. See https://aka.ms/blazor-offline-considerations + +self.importScripts('./service-worker-assets.js'); +self.addEventListener('install', event => event.waitUntil(onInstall(event))); +self.addEventListener('activate', event => event.waitUntil(onActivate(event))); +self.addEventListener('fetch', event => event.respondWith(onFetch(event))); + +const cacheNamePrefix = 'offline-cache-'; +const cacheName = `${cacheNamePrefix}${self.assetsManifest.version}`; +const offlineAssetsInclude = [/\.dll$/, /\.pdb$/, /\.wasm/, /\.html/, /\.js$/, /\.json$/, /\.css$/, /\.woff$/, /\.png$/, /\.jpe?g$/, /\.gif$/, /\.ico$/, /\.blat$/, /\.dat$/]; +const offlineAssetsExclude = [/^service-worker\.js$/]; + +async function onInstall(event) { + console.info('Service worker: Install'); + + // Fetch and cache all matching items from the assets manifest + const assetsRequests = self.assetsManifest.assets + .filter(asset => offlineAssetsInclude.some(pattern => pattern.test(asset.url))) + .filter(asset => !offlineAssetsExclude.some(pattern => pattern.test(asset.url))) + .map(asset => new Request(asset.url, { integrity: asset.hash, cache: 'no-cache' })); + await caches.open(cacheName).then(cache => cache.addAll(assetsRequests)); +} + +async function onActivate(event) { + console.info('Service worker: Activate'); + + // Delete unused caches + const cacheKeys = await caches.keys(); + await Promise.all(cacheKeys + .filter(key => key.startsWith(cacheNamePrefix) && key !== cacheName) + .map(key => caches.delete(key))); +} + +async function onFetch(event) { + let cachedResponse = null; + if (event.request.method === 'GET') { + // For all navigation requests, try to serve index.html from cache + // If you need some URLs to be server-rendered, edit the following check to exclude those URLs + const shouldServeIndexHtml = event.request.mode === 'navigate'; + + const request = shouldServeIndexHtml ? 'index.html' : event.request; + const cache = await caches.open(cacheName); + cachedResponse = await cache.match(request); + } + + return cachedResponse || fetch(event.request); +} \ No newline at end of file diff --git a/src/Host/Host.csproj b/src/Host/Host.csproj new file mode 100644 index 0000000..50cd34d --- /dev/null +++ b/src/Host/Host.csproj @@ -0,0 +1,24 @@ + + + + net6.0 + FSH.BlazorWebAssembly.Host + FSH.BlazorWebAssembly.Host + + + + + + + + + + + + + + Always + + + + \ No newline at end of file diff --git a/src/Host/Pages/Error.cshtml b/src/Host/Pages/Error.cshtml new file mode 100644 index 0000000..9257435 --- /dev/null +++ b/src/Host/Pages/Error.cshtml @@ -0,0 +1,44 @@ +@page +@model RewardsPlus.BlazorWebAssembly.Server.Pages.ErrorModel + + + + + + + + Error + + + + + +
+
+

Error.

+

An error occurred while processing your request.

+ + @if (Model.ShowRequestId) + { +

+ Request ID: @Model.RequestId +

+ } + +

Development Mode

+

+ Swapping to the Development environment displays detailed information about the error + that occurred. +

+

+ The Development environment shouldn't be enabled for deployed applications. + It can result in displaying sensitive information from exceptions to end users. + For local debugging, enable the Development environment by setting the + ASPNETCORE_ENVIRONMENT environment variable to Development + and restarting the app. +

+
+
+ + + diff --git a/src/Host/Pages/Error.cshtml.cs b/src/Host/Pages/Error.cshtml.cs new file mode 100644 index 0000000..84fedd9 --- /dev/null +++ b/src/Host/Pages/Error.cshtml.cs @@ -0,0 +1,19 @@ +using System.Diagnostics; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace RewardsPlus.BlazorWebAssembly.Server.Pages; + +[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] +[IgnoreAntiforgeryToken] +public class ErrorModel : PageModel +{ + public string? RequestId { get; set; } + + public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); + + public void OnGet() + { + RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; + } +} \ No newline at end of file diff --git a/src/Host/Program.cs b/src/Host/Program.cs new file mode 100644 index 0000000..098865c --- /dev/null +++ b/src/Host/Program.cs @@ -0,0 +1,26 @@ +var builder = WebApplication.CreateBuilder(args); +builder.Services.AddControllersWithViews(); +builder.Services.AddRazorPages(); + +var app = builder.Build(); + +if (app.Environment.IsDevelopment()) +{ + app.UseWebAssemblyDebugging(); +} +else +{ + app.UseExceptionHandler("/Error"); + app.UseHsts(); +} + +app.UseHttpsRedirection(); +app.UseBlazorFrameworkFiles(); +app.UseStaticFiles(); +app.UseRouting(); + +app.MapRazorPages(); +app.MapControllers(); +app.MapFallbackToFile("index.html"); + +app.Run(); \ No newline at end of file diff --git a/src/Host/Properties/launchSettings.json b/src/Host/Properties/launchSettings.json new file mode 100644 index 0000000..a24d289 --- /dev/null +++ b/src/Host/Properties/launchSettings.json @@ -0,0 +1,30 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:21716", + "sslPort": 44331 + } + }, + "profiles": { + "FSH.BlazorWebAssembly.Server": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "https://localhost:5002;http://localhost:5003", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} \ No newline at end of file diff --git a/src/Host/appsettings.Development.json b/src/Host/appsettings.Development.json new file mode 100644 index 0000000..1b2d3ba --- /dev/null +++ b/src/Host/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} \ No newline at end of file diff --git a/src/Host/appsettings.json b/src/Host/appsettings.json new file mode 100644 index 0000000..ec04bc1 --- /dev/null +++ b/src/Host/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} \ No newline at end of file diff --git a/src/Shared/Authorization/ClaimsPrincipalExtensions.cs b/src/Shared/Authorization/ClaimsPrincipalExtensions.cs new file mode 100644 index 0000000..71a5ff1 --- /dev/null +++ b/src/Shared/Authorization/ClaimsPrincipalExtensions.cs @@ -0,0 +1,39 @@ +using RewardsPlus.WebApi.Shared.Authorization; + +namespace System.Security.Claims; + +public static class ClaimsPrincipalExtensions +{ + public static string? GetEmail(this ClaimsPrincipal principal) + => principal.FindFirstValue(ClaimTypes.Email); + + public static string? GetTenant(this ClaimsPrincipal principal) + => principal.FindFirstValue(FSHClaims.Tenant); + + public static string? GetFullName(this ClaimsPrincipal principal) + => principal?.FindFirst(FSHClaims.Fullname)?.Value; + + public static string? GetFirstName(this ClaimsPrincipal principal) + => principal?.FindFirst(ClaimTypes.Name)?.Value; + + public static string? GetSurname(this ClaimsPrincipal principal) + => principal?.FindFirst(ClaimTypes.Surname)?.Value; + + public static string? GetPhoneNumber(this ClaimsPrincipal principal) + => principal.FindFirstValue(ClaimTypes.MobilePhone); + + public static string? GetUserId(this ClaimsPrincipal principal) + => principal.FindFirstValue(ClaimTypes.NameIdentifier); + + public static string? GetImageUrl(this ClaimsPrincipal principal) + => principal.FindFirstValue(FSHClaims.ImageUrl); + + public static DateTimeOffset GetExpiration(this ClaimsPrincipal principal) => + DateTimeOffset.FromUnixTimeSeconds(Convert.ToInt64( + principal.FindFirstValue(FSHClaims.Expiration))); + + private static string? FindFirstValue(this ClaimsPrincipal principal, string claimType) => + principal is null + ? throw new ArgumentNullException(nameof(principal)) + : principal.FindFirst(claimType)?.Value; +} \ No newline at end of file diff --git a/src/Shared/Authorization/FSHClaims.cs b/src/Shared/Authorization/FSHClaims.cs new file mode 100644 index 0000000..08be955 --- /dev/null +++ b/src/Shared/Authorization/FSHClaims.cs @@ -0,0 +1,11 @@ +namespace RewardsPlus.WebApi.Shared.Authorization; + +public static class FSHClaims +{ + public const string Tenant = "tenant"; + public const string Fullname = "fullName"; + public const string Permission = "permission"; + public const string ImageUrl = "image_url"; + public const string IpAddress = "ipAddress"; + public const string Expiration = "exp"; +} \ No newline at end of file diff --git a/src/Shared/Authorization/FSHPermissions.cs b/src/Shared/Authorization/FSHPermissions.cs new file mode 100644 index 0000000..4758485 --- /dev/null +++ b/src/Shared/Authorization/FSHPermissions.cs @@ -0,0 +1,80 @@ +using System.Collections.ObjectModel; + +namespace RewardsPlus.WebApi.Shared.Authorization; + +public static class FSHAction +{ + public const string View = nameof(View); + public const string Search = nameof(Search); + public const string Create = nameof(Create); + public const string Update = nameof(Update); + public const string Delete = nameof(Delete); + public const string Export = nameof(Export); + public const string Generate = nameof(Generate); + public const string Clean = nameof(Clean); + public const string UpgradeSubscription = nameof(UpgradeSubscription); +} + +public static class FSHResource +{ + public const string Tenants = nameof(Tenants); + public const string Dashboard = nameof(Dashboard); + public const string Hangfire = nameof(Hangfire); + public const string Users = nameof(Users); + public const string UserRoles = nameof(UserRoles); + public const string Roles = nameof(Roles); + public const string RoleClaims = nameof(RoleClaims); + public const string Products = nameof(Products); + public const string Brands = nameof(Brands); +} + +public static class FSHPermissions +{ + private static readonly FSHPermission[] _all = new FSHPermission[] + { + new("View Dashboard", FSHAction.View, FSHResource.Dashboard), + new("View Hangfire", FSHAction.View, FSHResource.Hangfire), + new("View Users", FSHAction.View, FSHResource.Users), + new("Search Users", FSHAction.Search, FSHResource.Users), + new("Create Users", FSHAction.Create, FSHResource.Users), + new("Update Users", FSHAction.Update, FSHResource.Users), + new("Delete Users", FSHAction.Delete, FSHResource.Users), + new("Export Users", FSHAction.Export, FSHResource.Users), + new("View UserRoles", FSHAction.View, FSHResource.UserRoles), + new("Update UserRoles", FSHAction.Update, FSHResource.UserRoles), + new("View Roles", FSHAction.View, FSHResource.Roles), + new("Create Roles", FSHAction.Create, FSHResource.Roles), + new("Update Roles", FSHAction.Update, FSHResource.Roles), + new("Delete Roles", FSHAction.Delete, FSHResource.Roles), + new("View RoleClaims", FSHAction.View, FSHResource.RoleClaims), + new("Update RoleClaims", FSHAction.Update, FSHResource.RoleClaims), + new("View Products", FSHAction.View, FSHResource.Products, IsBasic: true), + new("Search Products", FSHAction.Search, FSHResource.Products, IsBasic: true), + new("Create Products", FSHAction.Create, FSHResource.Products), + new("Update Products", FSHAction.Update, FSHResource.Products), + new("Delete Products", FSHAction.Delete, FSHResource.Products), + new("Export Products", FSHAction.Export, FSHResource.Products), + new("View Brands", FSHAction.View, FSHResource.Brands, IsBasic: true), + new("Search Brands", FSHAction.Search, FSHResource.Brands, IsBasic: true), + new("Create Brands", FSHAction.Create, FSHResource.Brands), + new("Update Brands", FSHAction.Update, FSHResource.Brands), + new("Delete Brands", FSHAction.Delete, FSHResource.Brands), + new("Generate Brands", FSHAction.Generate, FSHResource.Brands), + new("Clean Brands", FSHAction.Clean, FSHResource.Brands), + new("View Tenants", FSHAction.View, FSHResource.Tenants, IsRoot: true), + new("Create Tenants", FSHAction.Create, FSHResource.Tenants, IsRoot: true), + new("Update Tenants", FSHAction.Update, FSHResource.Tenants, IsRoot: true), + new("Upgrade Tenant Subscription", FSHAction.UpgradeSubscription, FSHResource.Tenants, IsRoot: true) + }; + + public static IReadOnlyList All { get; } = new ReadOnlyCollection(_all); + public static IReadOnlyList Root { get; } = new ReadOnlyCollection(_all.Where(p => p.IsRoot).ToArray()); + public static IReadOnlyList Admin { get; } = new ReadOnlyCollection(_all.Where(p => !p.IsRoot).ToArray()); + public static IReadOnlyList Basic { get; } = new ReadOnlyCollection(_all.Where(p => p.IsBasic).ToArray()); +} + +public record FSHPermission(string Description, string Action, string Resource, bool IsBasic = false, bool IsRoot = false) +{ + public string Name => NameFor(Action, Resource); + public static string NameFor(string action, string resource) => $"Permissions.{resource}.{action}"; +} \ No newline at end of file diff --git a/src/Shared/Authorization/FSHRoles.cs b/src/Shared/Authorization/FSHRoles.cs new file mode 100644 index 0000000..c38fa27 --- /dev/null +++ b/src/Shared/Authorization/FSHRoles.cs @@ -0,0 +1,17 @@ +using System.Collections.ObjectModel; + +namespace RewardsPlus.WebApi.Shared.Authorization; + +public static class FSHRoles +{ + public static string Admin = nameof(Admin); + public static string Basic = nameof(Basic); + + public static IReadOnlyList DefaultRoles { get; } = new ReadOnlyCollection(new[] + { + Admin, + Basic + }); + + public static bool IsDefault(string roleName) => DefaultRoles.Any(r => r == roleName); +} \ No newline at end of file diff --git a/src/Shared/Events/IEvent.cs b/src/Shared/Events/IEvent.cs new file mode 100644 index 0000000..f2cccc9 --- /dev/null +++ b/src/Shared/Events/IEvent.cs @@ -0,0 +1,5 @@ +namespace RewardsPlus.WebApi.Shared.Events; + +public interface IEvent +{ +} \ No newline at end of file diff --git a/src/Shared/MultiTenancy/MultitenancyConstants.cs b/src/Shared/MultiTenancy/MultitenancyConstants.cs new file mode 100644 index 0000000..d5ae1e1 --- /dev/null +++ b/src/Shared/MultiTenancy/MultitenancyConstants.cs @@ -0,0 +1,15 @@ +namespace RewardsPlus.WebApi.Shared.Multitenancy; + +public class MultitenancyConstants +{ + public static class Root + { + public const string Id = "root"; + public const string Name = "Root"; + public const string EmailAddress = "admin@root.com"; + } + + public const string DefaultPassword = "123Pa$$word!"; + + public const string TenantIdName = "tenant"; +} \ No newline at end of file diff --git a/src/Shared/Notifications/BasicNotification.cs b/src/Shared/Notifications/BasicNotification.cs new file mode 100644 index 0000000..a7e8bde --- /dev/null +++ b/src/Shared/Notifications/BasicNotification.cs @@ -0,0 +1,15 @@ +namespace RewardsPlus.WebApi.Shared.Notifications; + +public class BasicNotification : INotificationMessage +{ + public enum LabelType + { + Information, + Success, + Warning, + Error + } + + public string? Message { get; set; } + public LabelType Label { get; set; } +} \ No newline at end of file diff --git a/src/Shared/Notifications/INotificationMessage.cs b/src/Shared/Notifications/INotificationMessage.cs new file mode 100644 index 0000000..f059af0 --- /dev/null +++ b/src/Shared/Notifications/INotificationMessage.cs @@ -0,0 +1,5 @@ +namespace RewardsPlus.WebApi.Shared.Notifications; + +public interface INotificationMessage +{ +} \ No newline at end of file diff --git a/src/Shared/Notifications/JobNotification.cs b/src/Shared/Notifications/JobNotification.cs new file mode 100644 index 0000000..9ada2a2 --- /dev/null +++ b/src/Shared/Notifications/JobNotification.cs @@ -0,0 +1,8 @@ +namespace RewardsPlus.WebApi.Shared.Notifications; + +public class JobNotification : INotificationMessage +{ + public string? Message { get; set; } + public string? JobId { get; set; } + public decimal Progress { get; set; } +} \ No newline at end of file diff --git a/src/Shared/Notifications/NotificationConstants.cs b/src/Shared/Notifications/NotificationConstants.cs new file mode 100644 index 0000000..5a3d407 --- /dev/null +++ b/src/Shared/Notifications/NotificationConstants.cs @@ -0,0 +1,6 @@ +namespace RewardsPlus.WebApi.Shared.Notifications; + +public static class NotificationConstants +{ + public const string NotificationFromServer = nameof(NotificationFromServer); +} \ No newline at end of file diff --git a/src/Shared/Notifications/StatsChangedNotification.cs b/src/Shared/Notifications/StatsChangedNotification.cs new file mode 100644 index 0000000..1201fff --- /dev/null +++ b/src/Shared/Notifications/StatsChangedNotification.cs @@ -0,0 +1,5 @@ +namespace RewardsPlus.WebApi.Shared.Notifications; + +public class StatsChangedNotification : INotificationMessage +{ +} \ No newline at end of file diff --git a/src/Shared/Shared.csproj b/src/Shared/Shared.csproj new file mode 100644 index 0000000..72eb13f --- /dev/null +++ b/src/Shared/Shared.csproj @@ -0,0 +1,7 @@ + + + net6.0 + FSH.WebApi.Shared + FSH.WebApi.Shared + + \ No newline at end of file diff --git a/stylecop.json b/stylecop.json new file mode 100644 index 0000000..95ceebe --- /dev/null +++ b/stylecop.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json", + "settings": { + "orderingRules": { + "systemUsingDirectivesFirst": true, + "usingDirectivesPlacement": "outsideNamespace" + }, + "layoutRules": { + "newlineAtEndOfFile": "omit" + } + } +} \ No newline at end of file