1427 changed files with 602 additions and 302917 deletions
@ -0,0 +1,15 @@ |
|||
<Project> |
|||
<PropertyGroup> |
|||
<LangVersion>latest</LangVersion> |
|||
<Version>1.0.0</Version> |
|||
<NoWarn>$(NoWarn);CS1591</NoWarn> |
|||
<AbpProjectType>ms</AbpProjectType> |
|||
</PropertyGroup> |
|||
|
|||
<Target Name="NoWarnOnRazorViewImportedTypeConflicts" BeforeTargets="RazorCoreCompile"> |
|||
<PropertyGroup> |
|||
<NoWarn>$(NoWarn);0436</NoWarn> |
|||
</PropertyGroup> |
|||
</Target> |
|||
|
|||
</Project> |
|||
@ -0,0 +1 @@ |
|||
dotnet dev-certs https -v -ep localhost.pfx -p e8202f07-66e5-4619-be07-72ba76fde97f |
|||
@ -0,0 +1,23 @@ |
|||
[req] |
|||
default_bits = 2048 |
|||
default_keyfile = localhost.key |
|||
distinguished_name = req_distinguished_name |
|||
req_extensions = req_ext |
|||
x509_extensions = v3_ca |
|||
|
|||
[req_distinguished_name] |
|||
commonName = Common Name (e.g. server FQDN or YOUR name) |
|||
commonName_default = localhost |
|||
commonName_max = 64 |
|||
|
|||
[req_ext] |
|||
subjectAltName = @alt_names |
|||
|
|||
[v3_ca] |
|||
subjectAltName = @alt_names |
|||
basicConstraints = critical, CA:false |
|||
keyUsage = keyCertSign, cRLSign, digitalSignature,keyEncipherment |
|||
|
|||
[alt_names] |
|||
DNS.1 = localhost |
|||
DNS.2 = 127.0.0.1 |
|||
@ -0,0 +1,18 @@ |
|||
version: '3.7' |
|||
|
|||
services: |
|||
rabbitmq: |
|||
ports: |
|||
- "15672:15672" |
|||
- "5672:5672" |
|||
|
|||
redis: |
|||
ports: |
|||
- "6379:6379" |
|||
|
|||
sql-server-db: |
|||
ports: |
|||
- "1434:1433" |
|||
environment: |
|||
SA_PASSWORD: "myPassw0rd" |
|||
ACCEPT_EULA: "Y" |
|||
@ -0,0 +1,20 @@ |
|||
version: '3.7' |
|||
|
|||
services: |
|||
rabbitmq: |
|||
container_name: rabbitmq |
|||
image: rabbitmq:management-alpine |
|||
|
|||
redis: |
|||
container_name: redis |
|||
image: redis:alpine |
|||
|
|||
sql-server-db: |
|||
container_name: sql-server-db |
|||
image: mcr.microsoft.com/mssql/server |
|||
volumes: |
|||
- sqldata:/var/opt/mssql |
|||
|
|||
|
|||
volumes: |
|||
sqldata: |
|||
@ -0,0 +1 @@ |
|||
docker-compose -f docker-compose.infrastructure.yml -f docker-compose.infrastructure.override.yml down |
|||
@ -0,0 +1 @@ |
|||
docker-compose -f docker-compose.infrastructure.yml -f docker-compose.infrastructure.override.yml up -d |
|||
@ -1,5 +0,0 @@ |
|||
{ |
|||
"singleQuote": true, |
|||
"useTabs": false, |
|||
"tabWidth": 4 |
|||
} |
|||
@ -1,16 +0,0 @@ |
|||
# Editor configuration, see https://editorconfig.org |
|||
root = true |
|||
|
|||
[*] |
|||
charset = utf-8 |
|||
indent_style = space |
|||
indent_size = 2 |
|||
insert_final_newline = true |
|||
trim_trailing_whitespace = true |
|||
|
|||
[*.ts] |
|||
quote_type = single |
|||
|
|||
[*.md] |
|||
max_line_length = off |
|||
trim_trailing_whitespace = false |
|||
@ -1,46 +0,0 @@ |
|||
# See http://help.github.com/ignore-files/ for more about ignoring files. |
|||
|
|||
# compiled output |
|||
/dist |
|||
/tmp |
|||
/out-tsc |
|||
# Only exists if Bazel was run |
|||
/bazel-out |
|||
|
|||
# dependencies |
|||
/node_modules |
|||
|
|||
# profiling files |
|||
chrome-profiler-events*.json |
|||
speed-measure-plugin*.json |
|||
|
|||
# IDEs and editors |
|||
/.idea |
|||
.project |
|||
.classpath |
|||
.c9/ |
|||
*.launch |
|||
.settings/ |
|||
*.sublime-workspace |
|||
|
|||
# IDE - VSCode |
|||
.vscode/* |
|||
!.vscode/settings.json |
|||
!.vscode/tasks.json |
|||
!.vscode/launch.json |
|||
!.vscode/extensions.json |
|||
.history/* |
|||
|
|||
# misc |
|||
/.sass-cache |
|||
/connect.lock |
|||
/coverage |
|||
/libpeerconnection.log |
|||
npm-debug.log |
|||
yarn-error.log |
|||
testem.log |
|||
/typings |
|||
|
|||
# System Files |
|||
.DS_Store |
|||
Thumbs.db |
|||
@ -1,5 +0,0 @@ |
|||
{ |
|||
"singleQuote": true, |
|||
"printWidth": 100, |
|||
"arrowParens": "avoid" |
|||
} |
|||
@ -1,15 +0,0 @@ |
|||
{ |
|||
"recommendations": [ |
|||
"angular.ng-template", |
|||
"esbenp.prettier-vscode", |
|||
"ms-vscode.vscode-typescript-tslint-plugin", |
|||
"visualstudioexptteam.vscodeintellicode", |
|||
"christian-kohler.path-intellisense", |
|||
"christian-kohler.npm-intellisense", |
|||
"Mikael.Angular-BeastCode", |
|||
"xabikos.JavaScriptSnippets", |
|||
"msjsdiag.debugger-for-chrome", |
|||
"donjayamanne.githistory", |
|||
"oderwat.indent-rainbow" |
|||
] |
|||
} |
|||
@ -1,27 +0,0 @@ |
|||
# SaasService |
|||
|
|||
This is a startup project based on the ABP framework. For more information, visit <a href="https://abp.io/" target="_blank">abp.io</a> |
|||
|
|||
## Development server |
|||
|
|||
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. |
|||
|
|||
## Code scaffolding |
|||
|
|||
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. |
|||
|
|||
## Build |
|||
|
|||
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build. |
|||
|
|||
## Running unit tests |
|||
|
|||
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). |
|||
|
|||
## Running end-to-end tests |
|||
|
|||
Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). |
|||
|
|||
## Further help |
|||
|
|||
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). |
|||
@ -1,204 +0,0 @@ |
|||
{ |
|||
"$schema": "./node_modules/@angular/cli/lib/config/schema.json", |
|||
"version": 1, |
|||
"newProjectRoot": "projects", |
|||
"projects": { |
|||
"saas-service": { |
|||
"projectType": "library", |
|||
"root": "projects/saas-service", |
|||
"sourceRoot": "projects/saas-service/src", |
|||
"prefix": "lib", |
|||
"architect": { |
|||
"build": { |
|||
"builder": "@angular-devkit/build-angular:ng-packagr", |
|||
"options": { |
|||
"tsConfig": "projects/saas-service/tsconfig.lib.json", |
|||
"project": "projects/saas-service/ng-package.json" |
|||
}, |
|||
"configurations": { |
|||
"production": { |
|||
"tsConfig": "projects/saas-service/tsconfig.lib.prod.json" |
|||
} |
|||
} |
|||
}, |
|||
"test": { |
|||
"builder": "@angular-devkit/build-angular:karma", |
|||
"options": { |
|||
"main": "projects/saas-service/src/test.ts", |
|||
"tsConfig": "projects/saas-service/tsconfig.spec.json", |
|||
"karmaConfig": "projects/saas-service/karma.conf.js" |
|||
} |
|||
}, |
|||
"lint": { |
|||
"builder": "@angular-devkit/build-angular:tslint", |
|||
"options": { |
|||
"tsConfig": [ |
|||
"projects/saas-service/tsconfig.lib.json", |
|||
"projects/saas-service/tsconfig.spec.json" |
|||
], |
|||
"exclude": ["**/node_modules/**"] |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"dev-app": { |
|||
"projectType": "application", |
|||
"schematics": { |
|||
"@schematics/angular:component": { |
|||
"style": "scss" |
|||
} |
|||
}, |
|||
"root": "projects/dev-app", |
|||
"sourceRoot": "projects/dev-app/src", |
|||
"prefix": "app", |
|||
"architect": { |
|||
"build": { |
|||
"builder": "@angular-devkit/build-angular:browser", |
|||
"options": { |
|||
"outputPath": "dist/dev-app", |
|||
"index": "projects/dev-app/src/index.html", |
|||
"main": "projects/dev-app/src/main.ts", |
|||
"polyfills": "projects/dev-app/src/polyfills.ts", |
|||
"tsConfig": "projects/dev-app/tsconfig.app.json", |
|||
"aot": true, |
|||
"allowedCommonJsDependencies": ["chart.js", "js-sha256"], |
|||
"assets": ["projects/dev-app/src/favicon.ico", "projects/dev-app/src/assets"], |
|||
"styles": [ |
|||
{ |
|||
"input": "node_modules/@fortawesome/fontawesome-free/css/all.min.css", |
|||
"inject": true, |
|||
"bundleName": "fontawesome-all.min" |
|||
}, |
|||
{ |
|||
"input": "node_modules/@fortawesome/fontawesome-free/css/v4-shims.min.css", |
|||
"inject": true, |
|||
"bundleName": "fontawesome-v4-shims.min" |
|||
}, |
|||
{ |
|||
"input": "node_modules/@swimlane/ngx-datatable/index.css", |
|||
"inject": true, |
|||
"bundleName": "ngx-datatable-index" |
|||
}, |
|||
{ |
|||
"input": "node_modules/@swimlane/ngx-datatable/assets/icons.css", |
|||
"inject": true, |
|||
"bundleName": "ngx-datatable-icons" |
|||
}, |
|||
{ |
|||
"input": "node_modules/@swimlane/ngx-datatable/themes/material.css", |
|||
"inject": true, |
|||
"bundleName": "ngx-datatable-material" |
|||
}, |
|||
{ |
|||
"input": "node_modules/@abp/ng.theme.shared/styles/bootstrap-rtl.min.css", |
|||
"inject": false, |
|||
"bundleName": "bootstrap-rtl.min" |
|||
}, |
|||
{ |
|||
"input": "node_modules/bootstrap/dist/css/bootstrap.min.css", |
|||
"inject": true, |
|||
"bundleName": "bootstrap-ltr.min" |
|||
}, |
|||
"projects/dev-app/src/styles.scss" |
|||
], |
|||
"scripts": [] |
|||
}, |
|||
"configurations": { |
|||
"production": { |
|||
"tsConfig": "projects/dev-app/tsconfig.prod.json", |
|||
"fileReplacements": [ |
|||
{ |
|||
"replace": "projects/dev-app/src/environments/environment.ts", |
|||
"with": "projects/dev-app/src/environments/environment.prod.ts" |
|||
} |
|||
], |
|||
"optimization": true, |
|||
"outputHashing": "all", |
|||
"sourceMap": false, |
|||
"namedChunks": false, |
|||
"extractLicenses": true, |
|||
"vendorChunk": false, |
|||
"buildOptimizer": true, |
|||
"budgets": [ |
|||
{ |
|||
"type": "initial", |
|||
"maximumWarning": "2mb", |
|||
"maximumError": "5mb" |
|||
}, |
|||
{ |
|||
"type": "anyComponentStyle", |
|||
"maximumWarning": "6kb", |
|||
"maximumError": "10kb" |
|||
} |
|||
] |
|||
} |
|||
} |
|||
}, |
|||
"serve": { |
|||
"builder": "@angular-devkit/build-angular:dev-server", |
|||
"options": { |
|||
"browserTarget": "dev-app:build" |
|||
}, |
|||
"configurations": { |
|||
"production": { |
|||
"browserTarget": "dev-app:build:production" |
|||
} |
|||
} |
|||
}, |
|||
"extract-i18n": { |
|||
"builder": "@angular-devkit/build-angular:extract-i18n", |
|||
"options": { |
|||
"browserTarget": "dev-app:build" |
|||
} |
|||
}, |
|||
"test": { |
|||
"builder": "@angular-devkit/build-angular:karma", |
|||
"options": { |
|||
"main": "projects/dev-app/src/test.ts", |
|||
"polyfills": "projects/dev-app/src/polyfills.ts", |
|||
"tsConfig": "projects/dev-app/tsconfig.spec.json", |
|||
"karmaConfig": "projects/dev-app/karma.conf.js", |
|||
"assets": ["projects/dev-app/src/favicon.ico", "projects/dev-app/src/assets"], |
|||
"styles": [ |
|||
"node_modules/bootstrap/dist/css/bootstrap.min.css", |
|||
"node_modules/@fortawesome/fontawesome-free/css/all.min.css", |
|||
"node_modules/@fortawesome/fontawesome-free/css/v4-shims.min.css", |
|||
"node_modules/@swimlane/ngx-datatable/index.css", |
|||
"node_modules/@swimlane/ngx-datatable/assets/icons.css", |
|||
"node_modules/@swimlane/ngx-datatable/themes/material.css", |
|||
"projects/dev-app/src/styles.scss" |
|||
], |
|||
"scripts": [] |
|||
} |
|||
}, |
|||
"lint": { |
|||
"builder": "@angular-devkit/build-angular:tslint", |
|||
"options": { |
|||
"tsConfig": [ |
|||
"projects/dev-app/tsconfig.app.json", |
|||
"projects/dev-app/tsconfig.spec.json", |
|||
"projects/dev-app/e2e/tsconfig.json" |
|||
], |
|||
"exclude": ["**/node_modules/**"] |
|||
} |
|||
}, |
|||
"e2e": { |
|||
"builder": "@angular-devkit/build-angular:protractor", |
|||
"options": { |
|||
"protractorConfig": "projects/dev-app/e2e/protractor.conf.js", |
|||
"devServerTarget": "dev-app:serve" |
|||
}, |
|||
"configurations": { |
|||
"production": { |
|||
"devServerTarget": "dev-app:serve:production" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"cli": { |
|||
"analytics": false |
|||
}, |
|||
"defaultProject": "dev-app" |
|||
} |
|||
@ -1,62 +0,0 @@ |
|||
{ |
|||
"name": "saas-service", |
|||
"version": "0.0.0", |
|||
"scripts": { |
|||
"ng": "ng", |
|||
"start": "ng serve dev-app --open", |
|||
"build": "ng build saas-service --prod", |
|||
"build:app": "npm run symlink:copy -- --no-watch && ng build dev-app --prod", |
|||
"symlink:copy": "symlink copy --angular --packages @e-shop-on-abp/saas-service --prod", |
|||
"test": "ng test", |
|||
"lint": "ng lint", |
|||
"e2e": "ng e2e", |
|||
"compile:ivy": "yarn ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points --tsconfig './tsconfig.prod.json' --source node_modules --async false", |
|||
"postinstall": "npm run compile:ivy" |
|||
}, |
|||
"private": true, |
|||
"dependencies": { |
|||
"@abp/ng.account": "~4.3.3", |
|||
"@abp/ng.components": "~4.3.3", |
|||
"@abp/ng.core": "~4.3.3", |
|||
"@abp/ng.identity": "~4.3.3", |
|||
"@abp/ng.setting-management": "~4.3.3", |
|||
"@abp/ng.tenant-management": "~4.3.3", |
|||
"@abp/ng.theme.basic": "~4.3.3", |
|||
"@abp/ng.theme.shared": "~4.3.3", |
|||
"@angular/animations": "~11.1.0", |
|||
"@angular/common": "~11.1.0", |
|||
"@angular/compiler": "~11.1.0", |
|||
"@angular/core": "~11.1.0", |
|||
"@angular/forms": "~11.1.0", |
|||
"@angular/platform-browser": "~11.1.0", |
|||
"@angular/platform-browser-dynamic": "~11.1.0", |
|||
"@angular/router": "~11.1.0", |
|||
"rxjs": "~6.6.0", |
|||
"tslib": "^2.0.0", |
|||
"zone.js": "~0.10.2" |
|||
}, |
|||
"devDependencies": { |
|||
"@abp/ng.schematics": "~4.3.3", |
|||
"@angular-devkit/build-angular": "~0.1101.1", |
|||
"@angular/cli": "~11.1.1", |
|||
"@angular/compiler-cli": "~11.1.0", |
|||
"@angular/language-service": "~11.1.0", |
|||
"@types/jasmine": "~3.5.0", |
|||
"@types/jasminewd2": "~2.0.3", |
|||
"@types/node": "^12.11.1", |
|||
"codelyzer": "^6.0.1", |
|||
"jasmine-core": "~3.6.0", |
|||
"jasmine-spec-reporter": "~5.0.0", |
|||
"karma": "~5.2.3", |
|||
"karma-chrome-launcher": "~3.1.0", |
|||
"karma-coverage-istanbul-reporter": "~3.0.2", |
|||
"karma-jasmine": "~4.0.0", |
|||
"karma-jasmine-html-reporter": "^1.5.0", |
|||
"ng-packagr": "^11.0.1", |
|||
"protractor": "~7.0.0", |
|||
"symlink-manager": "^1.5.0", |
|||
"ts-node": "~8.3.0", |
|||
"tslint": "~6.1.0", |
|||
"typescript": "~4.1.3" |
|||
} |
|||
} |
|||
@ -1,12 +0,0 @@ |
|||
# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. |
|||
# For additional information regarding the format and rule options, please see: |
|||
# https://github.com/browserslist/browserslist#queries |
|||
|
|||
# You can see what browsers were selected by your queries by running: |
|||
# npx browserslist |
|||
|
|||
> 0.5% |
|||
last 2 versions |
|||
Firefox ESR |
|||
not dead |
|||
not IE 9-11 # For IE 9-11 support, remove 'not'. |
|||
@ -1,32 +0,0 @@ |
|||
// @ts-check
|
|||
// Protractor configuration file, see link for more information
|
|||
// https://github.com/angular/protractor/blob/master/lib/config.ts
|
|||
|
|||
const { SpecReporter } = require('jasmine-spec-reporter'); |
|||
|
|||
/** |
|||
* @type { import("protractor").Config } |
|||
*/ |
|||
exports.config = { |
|||
allScriptsTimeout: 11000, |
|||
specs: [ |
|||
'./src/**/*.e2e-spec.ts' |
|||
], |
|||
capabilities: { |
|||
browserName: 'chrome' |
|||
}, |
|||
directConnect: true, |
|||
baseUrl: 'http://localhost:4200/', |
|||
framework: 'jasmine', |
|||
jasmineNodeOpts: { |
|||
showColors: true, |
|||
defaultTimeoutInterval: 30000, |
|||
print: function() {} |
|||
}, |
|||
onPrepare() { |
|||
require('ts-node').register({ |
|||
project: require('path').join(__dirname, './tsconfig.json') |
|||
}); |
|||
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); |
|||
} |
|||
}; |
|||
@ -1,23 +0,0 @@ |
|||
import { AppPage } from './app.po'; |
|||
import { browser, logging } from 'protractor'; |
|||
|
|||
describe('workspace-project App', () => { |
|||
let page: AppPage; |
|||
|
|||
beforeEach(() => { |
|||
page = new AppPage(); |
|||
}); |
|||
|
|||
it('should display welcome message', () => { |
|||
page.navigateTo(); |
|||
expect(page.getTitleText()).toEqual('dev-app app is running!'); |
|||
}); |
|||
|
|||
afterEach(async () => { |
|||
// Assert that there are no errors emitted from the browser
|
|||
const logs = await browser.manage().logs().get(logging.Type.BROWSER); |
|||
expect(logs).not.toContain(jasmine.objectContaining({ |
|||
level: logging.Level.SEVERE, |
|||
} as logging.Entry)); |
|||
}); |
|||
}); |
|||
@ -1,11 +0,0 @@ |
|||
import { browser, by, element } from 'protractor'; |
|||
|
|||
export class AppPage { |
|||
navigateTo(): Promise<unknown> { |
|||
return browser.get(browser.baseUrl) as Promise<unknown>; |
|||
} |
|||
|
|||
getTitleText(): Promise<string> { |
|||
return element(by.css('app-root .content span')).getText() as Promise<string>; |
|||
} |
|||
} |
|||
@ -1,13 +0,0 @@ |
|||
{ |
|||
"extends": "../../../tsconfig.json", |
|||
"compilerOptions": { |
|||
"outDir": "../../../out-tsc/e2e", |
|||
"module": "commonjs", |
|||
"target": "es2018", |
|||
"types": [ |
|||
"jasmine", |
|||
"jasminewd2", |
|||
"node" |
|||
] |
|||
} |
|||
} |
|||
|
Before Width: | Height: | Size: 101 KiB |
@ -1,32 +0,0 @@ |
|||
// Karma configuration file, see link for more information
|
|||
// https://karma-runner.github.io/1.0/config/configuration-file.html
|
|||
|
|||
module.exports = function (config) { |
|||
config.set({ |
|||
basePath: '', |
|||
frameworks: ['jasmine', '@angular-devkit/build-angular'], |
|||
plugins: [ |
|||
require('karma-jasmine'), |
|||
require('karma-chrome-launcher'), |
|||
require('karma-jasmine-html-reporter'), |
|||
require('karma-coverage-istanbul-reporter'), |
|||
require('@angular-devkit/build-angular/plugins/karma') |
|||
], |
|||
client: { |
|||
clearContext: false // leave Jasmine Spec Runner output visible in browser
|
|||
}, |
|||
coverageIstanbulReporter: { |
|||
dir: require('path').join(__dirname, '../../coverage/dev-app'), |
|||
reports: ['html', 'lcovonly', 'text-summary'], |
|||
fixWebpackSourcePaths: true |
|||
}, |
|||
reporters: ['progress', 'kjhtml'], |
|||
port: 9876, |
|||
colors: true, |
|||
logLevel: config.LOG_INFO, |
|||
autoWatch: true, |
|||
browsers: ['Chrome'], |
|||
singleRun: false, |
|||
restartOnFileChange: true |
|||
}); |
|||
}; |
|||
@ -1,39 +0,0 @@ |
|||
import { NgModule } from '@angular/core'; |
|||
import { RouterModule, Routes } from '@angular/router'; |
|||
|
|||
const routes: Routes = [ |
|||
{ |
|||
path: '', |
|||
pathMatch: 'full', |
|||
loadChildren: () => import('./home/home.module').then(m => m.HomeModule), |
|||
}, |
|||
{ |
|||
path: 'account', |
|||
loadChildren: () => import('@abp/ng.account').then(m => m.AccountModule.forLazy()), |
|||
}, |
|||
{ |
|||
path: 'identity', |
|||
loadChildren: () => import('@abp/ng.identity').then(m => m.IdentityModule.forLazy()), |
|||
}, |
|||
{ |
|||
path: 'tenant-management', |
|||
loadChildren: () => |
|||
import('@abp/ng.tenant-management').then(m => m.TenantManagementModule.forLazy()), |
|||
}, |
|||
{ |
|||
path: 'setting-management', |
|||
loadChildren: () => |
|||
import('@abp/ng.setting-management').then(m => m.SettingManagementModule.forLazy()), |
|||
}, |
|||
{ |
|||
path: 'saas-service', |
|||
loadChildren: () => |
|||
import('@e-shop-on-abp/saas-service').then(m => m.SaasServiceModule.forLazy()), |
|||
}, |
|||
]; |
|||
|
|||
@NgModule({ |
|||
imports: [RouterModule.forRoot(routes, { relativeLinkResolution: 'legacy' })], |
|||
exports: [RouterModule], |
|||
}) |
|||
export class AppRoutingModule {} |
|||
@ -1,10 +0,0 @@ |
|||
import { Component } from '@angular/core'; |
|||
|
|||
@Component({ |
|||
selector: 'app-root', |
|||
template: ` |
|||
<abp-loader-bar></abp-loader-bar> |
|||
<abp-dynamic-layout></abp-dynamic-layout> |
|||
`,
|
|||
}) |
|||
export class AppComponent {} |
|||
@ -1,43 +0,0 @@ |
|||
import { AccountConfigModule } from '@abp/ng.account/config'; |
|||
import { CoreModule } from '@abp/ng.core'; |
|||
import { registerLocale } from '@abp/ng.core/locale'; |
|||
import { IdentityConfigModule } from '@abp/ng.identity/config'; |
|||
import { SettingManagementConfigModule } from '@abp/ng.setting-management/config'; |
|||
import { TenantManagementConfigModule } from '@abp/ng.tenant-management/config'; |
|||
import { ThemeSharedModule } from '@abp/ng.theme.shared'; |
|||
import { NgModule } from '@angular/core'; |
|||
import { BrowserModule } from '@angular/platform-browser'; |
|||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; |
|||
import { SaasServiceConfigModule } from '@e-shop-on-abp/saas-service/config'; |
|||
import { NgxsModule } from '@ngxs/store'; |
|||
import { environment } from '../environments/environment'; |
|||
import { AppRoutingModule } from './app-routing.module'; |
|||
import { AppComponent } from './app.component'; |
|||
import { APP_ROUTE_PROVIDER } from './route.provider'; |
|||
import { ThemeBasicModule } from '@abp/ng.theme.basic'; |
|||
|
|||
@NgModule({ |
|||
imports: [ |
|||
BrowserModule, |
|||
BrowserAnimationsModule, |
|||
AppRoutingModule, |
|||
CoreModule.forRoot({ |
|||
environment, |
|||
registerLocaleFn: registerLocale(), |
|||
sendNullsAsQueryParam: false, |
|||
skipGetAppConfiguration: false, |
|||
}), |
|||
ThemeSharedModule.forRoot(), |
|||
AccountConfigModule.forRoot(), |
|||
IdentityConfigModule.forRoot(), |
|||
TenantManagementConfigModule.forRoot(), |
|||
SettingManagementConfigModule.forRoot(), |
|||
SaasServiceConfigModule.forRoot(), |
|||
ThemeBasicModule.forRoot(), |
|||
NgxsModule.forRoot(), |
|||
], |
|||
providers: [APP_ROUTE_PROVIDER], |
|||
declarations: [AppComponent], |
|||
bootstrap: [AppComponent], |
|||
}) |
|||
export class AppModule {} |
|||
@ -1,16 +0,0 @@ |
|||
import { NgModule } from '@angular/core'; |
|||
import { Routes, RouterModule } from '@angular/router'; |
|||
import { HomeComponent } from './home.component'; |
|||
|
|||
const routes: Routes = [ |
|||
{ |
|||
path: '', |
|||
children: [{ path: '', component: HomeComponent }], |
|||
}, |
|||
]; |
|||
|
|||
@NgModule({ |
|||
imports: [RouterModule.forChild(routes)], |
|||
exports: [RouterModule], |
|||
}) |
|||
export class HomeRoutingModule {} |
|||
@ -1,7 +0,0 @@ |
|||
import { Component } from '@angular/core'; |
|||
|
|||
@Component({ |
|||
selector: 'app-home', |
|||
templateUrl: './home.component.html', |
|||
}) |
|||
export class HomeComponent {} |
|||
@ -1,10 +0,0 @@ |
|||
import { NgModule } from '@angular/core'; |
|||
import { SharedModule } from '../shared/shared.module'; |
|||
import { HomeRoutingModule } from './home-routing.module'; |
|||
import { HomeComponent } from './home.component'; |
|||
|
|||
@NgModule({ |
|||
declarations: [HomeComponent], |
|||
imports: [SharedModule, HomeRoutingModule], |
|||
}) |
|||
export class HomeModule {} |
|||
@ -1,25 +0,0 @@ |
|||
import { RoutesService, eLayoutType } from '@abp/ng.core'; |
|||
import { APP_INITIALIZER } from '@angular/core'; |
|||
|
|||
export const APP_ROUTE_PROVIDER = [ |
|||
{ |
|||
provide: APP_INITIALIZER, |
|||
useFactory: configureRoutes, |
|||
deps: [RoutesService], |
|||
multi: true, |
|||
}, |
|||
]; |
|||
|
|||
function configureRoutes(routesService: RoutesService) { |
|||
return () => { |
|||
routesService.add([ |
|||
{ |
|||
path: '/', |
|||
name: 'Home', |
|||
iconClass: 'fas fa-home', |
|||
order: 1, |
|||
layout: eLayoutType.application, |
|||
}, |
|||
]); |
|||
}; |
|||
} |
|||
@ -1,26 +0,0 @@ |
|||
import { CoreModule } from '@abp/ng.core'; |
|||
import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; |
|||
import { NgModule } from '@angular/core'; |
|||
import { ThemeBasicModule } from '@abp/ng.theme.basic'; |
|||
import { ThemeSharedModule } from '@abp/ng.theme.shared'; |
|||
import { NgxValidateCoreModule } from '@ngx-validate/core'; |
|||
|
|||
@NgModule({ |
|||
declarations: [], |
|||
imports: [ |
|||
CoreModule, |
|||
ThemeSharedModule, |
|||
ThemeBasicModule, |
|||
NgbDropdownModule, |
|||
NgxValidateCoreModule, |
|||
], |
|||
exports: [ |
|||
CoreModule, |
|||
ThemeSharedModule, |
|||
ThemeBasicModule, |
|||
NgbDropdownModule, |
|||
NgxValidateCoreModule, |
|||
], |
|||
providers: [], |
|||
}) |
|||
export class SharedModule {} |
|||
@ -1,29 +0,0 @@ |
|||
import { Environment } from '@abp/ng.core'; |
|||
|
|||
const baseUrl = 'http://localhost:4200'; |
|||
|
|||
export const environment = { |
|||
production: true, |
|||
application: { |
|||
baseUrl: 'http://localhost:4200/', |
|||
name: 'SaasService', |
|||
logoUrl: '', |
|||
}, |
|||
oAuthConfig: { |
|||
issuer: 'https://localhost:44348', |
|||
redirectUri: baseUrl, |
|||
clientId: 'SaasService_App', |
|||
responseType: 'code', |
|||
scope: 'offline_access SaasService', |
|||
}, |
|||
apis: { |
|||
default: { |
|||
url: 'https://localhost:44348', |
|||
rootNamespace: 'EShopOnAbp.SaasService', |
|||
}, |
|||
SaasService: { |
|||
url: 'https://localhost:44396', |
|||
rootNamespace: 'EShopOnAbp.SaasService', |
|||
}, |
|||
}, |
|||
} as Environment; |
|||
@ -1,29 +0,0 @@ |
|||
import { Environment } from '@abp/ng.core'; |
|||
|
|||
const baseUrl = 'http://localhost:4200'; |
|||
|
|||
export const environment = { |
|||
production: false, |
|||
application: { |
|||
baseUrl: 'http://localhost:4200/', |
|||
name: 'SaasService', |
|||
logoUrl: '', |
|||
}, |
|||
oAuthConfig: { |
|||
issuer: 'https://localhost:44348', |
|||
redirectUri: baseUrl, |
|||
clientId: 'SaasService_App', |
|||
responseType: 'code', |
|||
scope: 'offline_access SaasService role email openid profile', |
|||
}, |
|||
apis: { |
|||
default: { |
|||
url: 'https://localhost:44348', |
|||
rootNamespace: 'EShopOnAbp.SaasService', |
|||
}, |
|||
SaasService: { |
|||
url: 'https://localhost:44396', |
|||
rootNamespace: 'EShopOnAbp.SaasService', |
|||
}, |
|||
}, |
|||
} as Environment; |
|||
@ -1,13 +0,0 @@ |
|||
<!doctype html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<title>DevApp</title> |
|||
<base href="/"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|||
<link rel="icon" type="image/x-icon" href="favicon.ico"> |
|||
</head> |
|||
<body> |
|||
<app-root></app-root> |
|||
</body> |
|||
</html> |
|||
@ -1,12 +0,0 @@ |
|||
import { enableProdMode } from '@angular/core'; |
|||
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; |
|||
|
|||
import { AppModule } from './app/app.module'; |
|||
import { environment } from './environments/environment'; |
|||
|
|||
if (environment.production) { |
|||
enableProdMode(); |
|||
} |
|||
|
|||
platformBrowserDynamic().bootstrapModule(AppModule) |
|||
.catch(err => console.error(err)); |
|||
@ -1,66 +0,0 @@ |
|||
/*************************************************************************************************** |
|||
* Load `$localize` onto the global scope - used if i18n tags appear in Angular templates. |
|||
*/ |
|||
import '@angular/localize/init'; |
|||
/** |
|||
* This file includes polyfills needed by Angular and is loaded before the app. |
|||
* You can add your own extra polyfills to this file. |
|||
* |
|||
* This file is divided into 2 sections: |
|||
* 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. |
|||
* 2. Application imports. Files imported after ZoneJS that should be loaded before your main |
|||
* file. |
|||
* |
|||
* The current setup is for so-called "evergreen" browsers; the last versions of browsers that |
|||
* automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), |
|||
* Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. |
|||
* |
|||
* Learn more in https://angular.io/guide/browser-support
|
|||
*/ |
|||
|
|||
/*************************************************************************************************** |
|||
* BROWSER POLYFILLS |
|||
*/ |
|||
|
|||
/** IE10 and IE11 requires the following for NgClass support on SVG elements */ |
|||
// import 'classlist.js'; // Run `npm install --save classlist.js`.
|
|||
|
|||
/** |
|||
* Web Animations `@angular/platform-browser/animations` |
|||
* Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. |
|||
* Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). |
|||
*/ |
|||
// import 'web-animations-js'; // Run `npm install --save web-animations-js`.
|
|||
|
|||
/** |
|||
* By default, zone.js will patch all possible macroTask and DomEvents |
|||
* user can disable parts of macroTask/DomEvents patch by setting following flags |
|||
* because those flags need to be set before `zone.js` being loaded, and webpack |
|||
* will put import in the top of bundle, so user need to create a separate file |
|||
* in this directory (for example: zone-flags.ts), and put the following flags |
|||
* into that file, and then add the following code before importing zone.js. |
|||
* import './zone-flags'; |
|||
* |
|||
* The flags allowed in zone-flags.ts are listed here. |
|||
* |
|||
* The following flags will work for all browsers. |
|||
* |
|||
* (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
|
|||
* (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
|
|||
* (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames
|
|||
* |
|||
* in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js |
|||
* with the following flag, it will bypass `zone.js` patch for IE/Edge |
|||
* |
|||
* (window as any).__Zone_enable_cross_context_check = true; |
|||
* |
|||
*/ |
|||
|
|||
/*************************************************************************************************** |
|||
* Zone JS is required by default for Angular itself. |
|||
*/ |
|||
import 'zone.js/dist/zone'; // Included with Angular CLI.
|
|||
|
|||
/*************************************************************************************************** |
|||
* APPLICATION IMPORTS |
|||
*/ |
|||
@ -1 +0,0 @@ |
|||
/* You can add global styles to this file, and also import other style files */ |
|||
@ -1,25 +0,0 @@ |
|||
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
|
|||
|
|||
import 'zone.js/dist/zone-testing'; |
|||
import { getTestBed } from '@angular/core/testing'; |
|||
import { |
|||
BrowserDynamicTestingModule, |
|||
platformBrowserDynamicTesting |
|||
} from '@angular/platform-browser-dynamic/testing'; |
|||
|
|||
declare const require: { |
|||
context(path: string, deep?: boolean, filter?: RegExp): { |
|||
keys(): string[]; |
|||
<T>(id: string): T; |
|||
}; |
|||
}; |
|||
|
|||
// First, initialize the Angular testing environment.
|
|||
getTestBed().initTestEnvironment( |
|||
BrowserDynamicTestingModule, |
|||
platformBrowserDynamicTesting() |
|||
); |
|||
// Then we find all the tests.
|
|||
const context = require.context('./', true, /\.spec\.ts$/); |
|||
// And load the modules.
|
|||
context.keys().map(context); |
|||
@ -1,14 +0,0 @@ |
|||
{ |
|||
"extends": "../../tsconfig.json", |
|||
"compilerOptions": { |
|||
"outDir": "../../out-tsc/app", |
|||
"types": [] |
|||
}, |
|||
"files": [ |
|||
"src/main.ts", |
|||
"src/polyfills.ts" |
|||
], |
|||
"include": [ |
|||
"src/**/*.d.ts" |
|||
] |
|||
} |
|||
@ -1,9 +0,0 @@ |
|||
{ |
|||
"extends": "../../tsconfig.prod.json", |
|||
"compilerOptions": { |
|||
"outDir": "../../out-tsc/app", |
|||
"types": [] |
|||
}, |
|||
"files": ["src/main.ts", "src/polyfills.ts"], |
|||
"include": ["src/**/*.d.ts"] |
|||
} |
|||
@ -1,18 +0,0 @@ |
|||
{ |
|||
"extends": "../../tsconfig.json", |
|||
"compilerOptions": { |
|||
"outDir": "../../out-tsc/spec", |
|||
"types": [ |
|||
"jasmine", |
|||
"node" |
|||
] |
|||
}, |
|||
"files": [ |
|||
"src/test.ts", |
|||
"src/polyfills.ts" |
|||
], |
|||
"include": [ |
|||
"src/**/*.spec.ts", |
|||
"src/**/*.d.ts" |
|||
] |
|||
} |
|||
@ -1,17 +0,0 @@ |
|||
{ |
|||
"extends": "../../tslint.json", |
|||
"rules": { |
|||
"directive-selector": [ |
|||
true, |
|||
"attribute", |
|||
"app", |
|||
"camelCase" |
|||
], |
|||
"component-selector": [ |
|||
true, |
|||
"element", |
|||
"app", |
|||
"kebab-case" |
|||
] |
|||
} |
|||
} |
|||
@ -1,24 +0,0 @@ |
|||
# SaasService |
|||
|
|||
This is a startup project based on the ABP framework. For more information, visit <a href="https://abp.io/" target="_blank">abp.io</a |
|||
|
|||
## Code scaffolding |
|||
|
|||
Run `ng generate component component-name --project saas-service` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project saas-service`. |
|||
> Note: Don't forget to add `--project saas-service` or else it will be added to the default project in your `angular.json` file. |
|||
|
|||
## Build |
|||
|
|||
Run `ng build saas-service` to build the project. The build artifacts will be stored in the `dist/` directory. |
|||
|
|||
## Publishing |
|||
|
|||
After building your library with `ng build saas-service`, go to the dist folder `cd dist/saas-service` and run `npm publish`. |
|||
|
|||
## Running unit tests |
|||
|
|||
Run `ng test saas-service` to execute the unit tests via [Karma](https://karma-runner.github.io). |
|||
|
|||
## Further help |
|||
|
|||
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). |
|||
@ -1,7 +0,0 @@ |
|||
{ |
|||
"$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", |
|||
"dest": "../../dist/saas-service/config", |
|||
"lib": { |
|||
"entryFile": "src/public-api.ts" |
|||
} |
|||
} |
|||
@ -1 +0,0 @@ |
|||
export * from './route-names'; |
|||
@ -1,3 +0,0 @@ |
|||
export const enum eSaasServiceRouteNames { |
|||
SaasService = 'SaasService', |
|||
} |
|||
@ -1 +0,0 @@ |
|||
export * from './route.provider'; |
|||
@ -1,26 +0,0 @@ |
|||
import { eLayoutType, RoutesService } from '@abp/ng.core'; |
|||
import { APP_INITIALIZER } from '@angular/core'; |
|||
import { eSaasServiceRouteNames } from '../enums/route-names'; |
|||
|
|||
export const SAAS_SERVİCE_ROUTE_PROVIDERS = [ |
|||
{ |
|||
provide: APP_INITIALIZER, |
|||
useFactory: configureRoutes, |
|||
deps: [RoutesService], |
|||
multi: true, |
|||
}, |
|||
]; |
|||
|
|||
export function configureRoutes(routesService: RoutesService) { |
|||
return () => { |
|||
routesService.add([ |
|||
{ |
|||
path: '/saas-service', |
|||
name: eSaasServiceRouteNames.SaasService, |
|||
iconClass: 'fas fa-book', |
|||
layout: eLayoutType.application, |
|||
order: 3, |
|||
}, |
|||
]); |
|||
}; |
|||
} |
|||
@ -1,3 +0,0 @@ |
|||
export * from './enums'; |
|||
export * from './saas-service-config.module'; |
|||
export * from './providers'; |
|||
@ -1,12 +0,0 @@ |
|||
import { ModuleWithProviders, NgModule } from '@angular/core'; |
|||
import { SAAS_SERVİCE_ROUTE_PROVIDERS } from './providers/route.provider'; |
|||
|
|||
@NgModule() |
|||
export class SaasServiceConfigModule { |
|||
static forRoot(): ModuleWithProviders<SaasServiceConfigModule> { |
|||
return { |
|||
ngModule: SaasServiceConfigModule, |
|||
providers: [SAAS_SERVİCE_ROUTE_PROVIDERS], |
|||
}; |
|||
} |
|||
} |
|||
@ -1,32 +0,0 @@ |
|||
// Karma configuration file, see link for more information
|
|||
// https://karma-runner.github.io/1.0/config/configuration-file.html
|
|||
|
|||
module.exports = function (config) { |
|||
config.set({ |
|||
basePath: '', |
|||
frameworks: ['jasmine', '@angular-devkit/build-angular'], |
|||
plugins: [ |
|||
require('karma-jasmine'), |
|||
require('karma-chrome-launcher'), |
|||
require('karma-jasmine-html-reporter'), |
|||
require('karma-coverage-istanbul-reporter'), |
|||
require('@angular-devkit/build-angular/plugins/karma') |
|||
], |
|||
client: { |
|||
clearContext: false // leave Jasmine Spec Runner output visible in browser
|
|||
}, |
|||
coverageIstanbulReporter: { |
|||
dir: require('path').join(__dirname, '../../coverage/saas-service'), |
|||
reports: ['html', 'lcovonly', 'text-summary'], |
|||
fixWebpackSourcePaths: true |
|||
}, |
|||
reporters: ['progress', 'kjhtml'], |
|||
port: 9876, |
|||
colors: true, |
|||
logLevel: config.LOG_INFO, |
|||
autoWatch: true, |
|||
browsers: ['Chrome'], |
|||
singleRun: false, |
|||
restartOnFileChange: true |
|||
}); |
|||
}; |
|||
@ -1,7 +0,0 @@ |
|||
{ |
|||
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json", |
|||
"dest": "../../dist/saas-service", |
|||
"lib": { |
|||
"entryFile": "src/public-api.ts" |
|||
} |
|||
} |
|||
@ -1,7 +0,0 @@ |
|||
module.exports = { |
|||
entryPoints: { |
|||
".": {}, |
|||
"./config": {}, |
|||
"./dist": { ignore: true }, |
|||
}, |
|||
}; |
|||
@ -1,13 +0,0 @@ |
|||
{ |
|||
"name": "@e-shop-on-abp/saas-service", |
|||
"version": "0.0.1", |
|||
"peerDependencies": { |
|||
"@angular/common": "^9.1.11", |
|||
"@angular/core": "^9.1.11", |
|||
"@abp/ng.core": ">=4.3.3", |
|||
"@abp/ng.theme.shared": ">=4.3.3" |
|||
}, |
|||
"dependencies": { |
|||
"tslib": "^2.0.0" |
|||
} |
|||
} |
|||
@ -1,15 +0,0 @@ |
|||
import { Component, OnInit } from '@angular/core'; |
|||
import { SaasServiceService } from '../services/saas-service.service'; |
|||
|
|||
@Component({ |
|||
selector: 'lib-saas-service', |
|||
template: ` <p>saas-service works!</p> `, |
|||
styles: [], |
|||
}) |
|||
export class SaasServiceComponent implements OnInit { |
|||
constructor(private service: SaasServiceService) {} |
|||
|
|||
ngOnInit(): void { |
|||
this.service.sample().subscribe(console.log); |
|||
} |
|||
} |
|||
@ -1,24 +0,0 @@ |
|||
import { NgModule } from '@angular/core'; |
|||
import { DynamicLayoutComponent } from '@abp/ng.core'; |
|||
import { Routes, RouterModule } from '@angular/router'; |
|||
import { SaasServiceComponent } from './components/saas-service.component'; |
|||
|
|||
const routes: Routes = [ |
|||
{ |
|||
path: '', |
|||
pathMatch: 'full', |
|||
component: DynamicLayoutComponent, |
|||
children: [ |
|||
{ |
|||
path: '', |
|||
component: SaasServiceComponent, |
|||
}, |
|||
], |
|||
}, |
|||
]; |
|||
|
|||
@NgModule({ |
|||
imports: [RouterModule.forChild(routes)], |
|||
exports: [RouterModule], |
|||
}) |
|||
export class SaasServiceRoutingModule {} |
|||
@ -1,25 +0,0 @@ |
|||
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; |
|||
|
|||
import { SaasServiceComponent } from './saas-service.component'; |
|||
|
|||
describe('SaasServiceComponent', () => { |
|||
let component: SaasServiceComponent; |
|||
let fixture: ComponentFixture<SaasServiceComponent>; |
|||
|
|||
beforeEach(waitForAsync(() => { |
|||
TestBed.configureTestingModule({ |
|||
declarations: [ SaasServiceComponent ] |
|||
}) |
|||
.compileComponents(); |
|||
})); |
|||
|
|||
beforeEach(() => { |
|||
fixture = TestBed.createComponent(SaasServiceComponent); |
|||
component = fixture.componentInstance; |
|||
fixture.detectChanges(); |
|||
}); |
|||
|
|||
it('should create', () => { |
|||
expect(component).toBeTruthy(); |
|||
}); |
|||
}); |
|||
@ -1,23 +0,0 @@ |
|||
import { NgModule, NgModuleFactory, ModuleWithProviders } from '@angular/core'; |
|||
import { CoreModule, LazyModuleFactory } from '@abp/ng.core'; |
|||
import { ThemeSharedModule } from '@abp/ng.theme.shared'; |
|||
import { SaasServiceComponent } from './components/saas-service.component'; |
|||
import { SaasServiceRoutingModule } from './saas-service-routing.module'; |
|||
|
|||
@NgModule({ |
|||
declarations: [SaasServiceComponent], |
|||
imports: [CoreModule, ThemeSharedModule, SaasServiceRoutingModule], |
|||
exports: [SaasServiceComponent], |
|||
}) |
|||
export class SaasServiceModule { |
|||
static forChild(): ModuleWithProviders<SaasServiceModule> { |
|||
return { |
|||
ngModule: SaasServiceModule, |
|||
providers: [], |
|||
}; |
|||
} |
|||
|
|||
static forLazy(): NgModuleFactory<SaasServiceModule> { |
|||
return new LazyModuleFactory(SaasServiceModule.forChild()); |
|||
} |
|||
} |
|||
@ -1,16 +0,0 @@ |
|||
import { TestBed } from '@angular/core/testing'; |
|||
|
|||
import { SaasServiceService } from './saas-service.service'; |
|||
|
|||
describe('SaasServiceService', () => { |
|||
let service: SaasServiceService; |
|||
|
|||
beforeEach(() => { |
|||
TestBed.configureTestingModule({}); |
|||
service = TestBed.inject(SaasServiceService); |
|||
}); |
|||
|
|||
it('should be created', () => { |
|||
expect(service).toBeTruthy(); |
|||
}); |
|||
}); |
|||
@ -1,18 +0,0 @@ |
|||
import { Injectable } from '@angular/core'; |
|||
import { RestService } from '@abp/ng.core'; |
|||
|
|||
@Injectable({ |
|||
providedIn: 'root', |
|||
}) |
|||
export class SaasServiceService { |
|||
apiName = 'SaasService'; |
|||
|
|||
constructor(private restService: RestService) {} |
|||
|
|||
sample() { |
|||
return this.restService.request<void, any>( |
|||
{ method: 'GET', url: '/api/SaasService/sample' }, |
|||
{ apiName: this.apiName } |
|||
); |
|||
} |
|||
} |
|||
@ -1,7 +0,0 @@ |
|||
/* |
|||
* Public API Surface of saas-service |
|||
*/ |
|||
|
|||
export * from './lib/components/saas-service.component'; |
|||
export * from './lib/services/saas-service.service'; |
|||
export * from './lib/saas-service.module'; |
|||
@ -1,26 +0,0 @@ |
|||
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
|
|||
|
|||
import 'zone.js/dist/zone'; |
|||
import 'zone.js/dist/zone-testing'; |
|||
import { getTestBed } from '@angular/core/testing'; |
|||
import { |
|||
BrowserDynamicTestingModule, |
|||
platformBrowserDynamicTesting |
|||
} from '@angular/platform-browser-dynamic/testing'; |
|||
|
|||
declare const require: { |
|||
context(path: string, deep?: boolean, filter?: RegExp): { |
|||
keys(): string[]; |
|||
<T>(id: string): T; |
|||
}; |
|||
}; |
|||
|
|||
// First, initialize the Angular testing environment.
|
|||
getTestBed().initTestEnvironment( |
|||
BrowserDynamicTestingModule, |
|||
platformBrowserDynamicTesting() |
|||
); |
|||
// Then we find all the tests.
|
|||
const context = require.context('./', true, /\.spec\.ts$/); |
|||
// And load the modules.
|
|||
context.keys().map(context); |
|||
@ -1,18 +0,0 @@ |
|||
{ |
|||
"extends": "../../tsconfig.prod.json", |
|||
"compilerOptions": { |
|||
"outDir": "../../out-tsc/lib", |
|||
"declarationMap": true, |
|||
"target": "es2015", |
|||
"declaration": true, |
|||
"inlineSources": true, |
|||
"types": [], |
|||
"lib": ["dom", "es2018"] |
|||
}, |
|||
"angularCompilerOptions": { |
|||
"skipTemplateCodegen": true, |
|||
"strictMetadataEmit": true, |
|||
"enableResourceInlining": true |
|||
}, |
|||
"exclude": ["src/test.ts", "**/*.spec.ts"] |
|||
} |
|||
@ -1,9 +0,0 @@ |
|||
{ |
|||
"extends": "./tsconfig.lib.json", |
|||
"compilerOptions": { |
|||
"declarationMap": false |
|||
}, |
|||
"angularCompilerOptions": { |
|||
"enableIvy": false |
|||
} |
|||
} |
|||
@ -1,17 +0,0 @@ |
|||
{ |
|||
"extends": "../../tsconfig.json", |
|||
"compilerOptions": { |
|||
"outDir": "../../out-tsc/spec", |
|||
"types": [ |
|||
"jasmine", |
|||
"node" |
|||
] |
|||
}, |
|||
"files": [ |
|||
"src/test.ts" |
|||
], |
|||
"include": [ |
|||
"**/*.spec.ts", |
|||
"**/*.d.ts" |
|||
] |
|||
} |
|||
@ -1,17 +0,0 @@ |
|||
{ |
|||
"extends": "../../tslint.json", |
|||
"rules": { |
|||
"directive-selector": [ |
|||
true, |
|||
"attribute", |
|||
"lib", |
|||
"camelCase" |
|||
], |
|||
"component-selector": [ |
|||
true, |
|||
"element", |
|||
"lib", |
|||
"kebab-case" |
|||
] |
|||
} |
|||
} |
|||
@ -1,15 +0,0 @@ |
|||
{ |
|||
"extends": "./tsconfig.prod.json", |
|||
"compilerOptions": { |
|||
"paths": { |
|||
"@e-shop-on-abp/saas-service": [ |
|||
"projects/saas-service/src/public-api.ts" |
|||
], |
|||
"@e-shop-on-abp/saas-service/config": [ |
|||
"projects/saas-service/config/src/public-api.ts" |
|||
], |
|||
"@proxy": ["projects/saas-service/src/lib/proxy/index.ts"], |
|||
"@proxy/*": ["projects/saas-service/src/lib/proxy/*"] |
|||
} |
|||
} |
|||
} |
|||
@ -1,20 +0,0 @@ |
|||
{ |
|||
"compileOnSave": false, |
|||
"compilerOptions": { |
|||
"baseUrl": "./", |
|||
"outDir": "./dist/out-tsc", |
|||
"sourceMap": true, |
|||
"declaration": false, |
|||
"downlevelIteration": true, |
|||
"experimentalDecorators": true, |
|||
"module": "esnext", |
|||
"moduleResolution": "node", |
|||
"importHelpers": true, |
|||
"target": "es2015", |
|||
"lib": ["es2018", "dom"] |
|||
}, |
|||
"angularCompilerOptions": { |
|||
"fullTemplateTypeCheck": true, |
|||
"strictInjectionParameters": true |
|||
} |
|||
} |
|||
@ -1,138 +0,0 @@ |
|||
{ |
|||
"extends": "tslint:recommended", |
|||
"rulesDirectory": [ |
|||
"codelyzer" |
|||
], |
|||
"rules": { |
|||
"align": { |
|||
"options": [ |
|||
"parameters", |
|||
"statements" |
|||
] |
|||
}, |
|||
"array-type": false, |
|||
"arrow-return-shorthand": true, |
|||
"curly": true, |
|||
"deprecation": { |
|||
"severity": "warning" |
|||
}, |
|||
"eofline": true, |
|||
"import-blacklist": [ |
|||
true, |
|||
"rxjs/Rx" |
|||
], |
|||
"import-spacing": true, |
|||
"indent": { |
|||
"options": [ |
|||
"spaces" |
|||
] |
|||
}, |
|||
"max-classes-per-file": false, |
|||
"max-line-length": [ |
|||
true, |
|||
140 |
|||
], |
|||
"member-ordering": [ |
|||
true, |
|||
{ |
|||
"order": [ |
|||
"static-field", |
|||
"instance-field", |
|||
"static-method", |
|||
"instance-method" |
|||
] |
|||
} |
|||
], |
|||
"no-console": [ |
|||
true, |
|||
"debug", |
|||
"info", |
|||
"time", |
|||
"timeEnd", |
|||
"trace" |
|||
], |
|||
"no-empty": false, |
|||
"no-inferrable-types": [ |
|||
true, |
|||
"ignore-params" |
|||
], |
|||
"no-non-null-assertion": true, |
|||
"no-redundant-jsdoc": true, |
|||
"no-switch-case-fall-through": true, |
|||
"no-var-requires": false, |
|||
"object-literal-key-quotes": [ |
|||
true, |
|||
"as-needed" |
|||
], |
|||
"quotemark": [ |
|||
true, |
|||
"single" |
|||
], |
|||
"semicolon": { |
|||
"options": [ |
|||
"always", |
|||
"ignore-bound-class-methods" |
|||
] |
|||
}, |
|||
"space-before-function-paren": { |
|||
"options": { |
|||
"anonymous": "never", |
|||
"asyncArrow": "always", |
|||
"constructor": "never", |
|||
"method": "never", |
|||
"named": "never" |
|||
} |
|||
}, |
|||
"typedef-whitespace": { |
|||
"options": [ |
|||
{ |
|||
"call-signature": "nospace", |
|||
"index-signature": "nospace", |
|||
"parameter": "nospace", |
|||
"property-declaration": "nospace", |
|||
"variable-declaration": "nospace" |
|||
}, |
|||
{ |
|||
"call-signature": "onespace", |
|||
"index-signature": "onespace", |
|||
"parameter": "onespace", |
|||
"property-declaration": "onespace", |
|||
"variable-declaration": "onespace" |
|||
} |
|||
] |
|||
}, |
|||
"variable-name": { |
|||
"options": [ |
|||
"ban-keywords", |
|||
"check-format", |
|||
"allow-pascal-case" |
|||
] |
|||
}, |
|||
"whitespace": { |
|||
"options": [ |
|||
"check-branch", |
|||
"check-decl", |
|||
"check-operator", |
|||
"check-separator", |
|||
"check-type", |
|||
"check-typecast" |
|||
] |
|||
}, |
|||
"component-class-suffix": true, |
|||
"contextual-lifecycle": true, |
|||
"directive-class-suffix": true, |
|||
"no-conflicting-lifecycle": true, |
|||
"no-host-metadata-property": true, |
|||
"no-input-rename": true, |
|||
"no-inputs-metadata-property": true, |
|||
"no-output-native": true, |
|||
"no-output-on-prefix": true, |
|||
"no-output-rename": true, |
|||
"no-outputs-metadata-property": true, |
|||
"template-banana-in-box": true, |
|||
"template-no-negated-async": true, |
|||
"use-lifecycle-interface": true, |
|||
"use-pipe-transform-interface": true, |
|||
"object-literal-shorthand": false |
|||
} |
|||
} |
|||
@ -1,16 +0,0 @@ |
|||
<Project> |
|||
<PropertyGroup> |
|||
<LangVersion>latest</LangVersion> |
|||
<Version>0.1.0</Version> |
|||
<NoWarn>$(NoWarn);CS1591;CS0436</NoWarn> |
|||
<AbpProjectType>module</AbpProjectType> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="ConfigureAwait.Fody" Version="3.3.1" PrivateAssets="All" /> |
|||
<PackageReference Include="Fody" Version="6.5.0"> |
|||
<PrivateAssets>All</PrivateAssets> |
|||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> |
|||
</PackageReference> |
|||
</ItemGroup> |
|||
</Project> |
|||
@ -1,20 +0,0 @@ |
|||
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build |
|||
COPY . . |
|||
|
|||
WORKDIR /templates/service/host/IdentityServerHost |
|||
RUN dotnet restore |
|||
RUN dotnet ef migrations script -i -o migrations-IdentityServerHost.sql |
|||
|
|||
WORKDIR /templates/service/host/EShopOnAbp.SaasService.Host |
|||
RUN dotnet restore |
|||
RUN dotnet ef migrations script -i -o migrations-SaasService.sql |
|||
|
|||
FROM mcr.microsoft.com/mssql-tools AS final |
|||
WORKDIR /src |
|||
COPY --from=build /templates/service/host/IdentityServerHost/migrations-IdentityServerHost.sql migrations-IdentityServerHost.sql |
|||
COPY --from=build /templates/service/host/EShopOnAbp.SaasService.Host/migrations-SaasService.sql migrations-SaasService.sql |
|||
COPY --from=build /templates/service/database/entrypoint.sh . |
|||
RUN /bin/bash -c "sed -i $'s/\r$//' entrypoint.sh" |
|||
RUN chmod +x ./entrypoint.sh |
|||
|
|||
ENTRYPOINT ["./entrypoint.sh"] |
|||
@ -1,12 +0,0 @@ |
|||
#!/bin/bash |
|||
|
|||
until /opt/mssql-tools/bin/sqlcmd -S sqlserver -U SA -P $SA_PASSWORD -Q 'SELECT name FROM master.sys.databases'; do |
|||
>&2 echo "SQL Server is starting up" |
|||
sleep 1 |
|||
done |
|||
|
|||
/opt/mssql-tools/bin/sqlcmd -S sqlserver -U SA -P $SA_PASSWORD -Q "CREATE DATABASE [$IdentityServer_DB]" |
|||
/opt/mssql-tools/bin/sqlcmd -S sqlserver -U SA -P $SA_PASSWORD -Q "CREATE DATABASE [$SaasService_DB]" |
|||
|
|||
/opt/mssql-tools/bin/sqlcmd -d $IdentityServer_DB -S sqlserver -U sa -P $SA_PASSWORD -i migrations-IdentityServerHost.sql |
|||
/opt/mssql-tools/bin/sqlcmd -d $SaasService_DB -S sqlserver -U sa -P $SA_PASSWORD -i migrations-SaasService.sql |
|||
@ -1,13 +0,0 @@ |
|||
version: '3.4' |
|||
|
|||
services: |
|||
migrations: |
|||
build: |
|||
context: ../../ |
|||
dockerfile: templates/service/database/Dockerfile |
|||
depends_on: |
|||
- sqlserver |
|||
environment: |
|||
- IdentityServer_DB=SaasService_Identity |
|||
- SaasService_DB=SaasService_ModuleDb |
|||
- SA_PASSWORD=yourStrong(!)Password |
|||
@ -1,29 +0,0 @@ |
|||
version: '3.4' |
|||
|
|||
services: |
|||
sqlserver: |
|||
environment: |
|||
- SA_PASSWORD=yourStrong(!)Password |
|||
- ACCEPT_EULA=Y |
|||
ports: |
|||
- "51599:1433" |
|||
|
|||
identity-server: |
|||
environment: |
|||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
|||
- ConnectionStrings__Default=Server=sqlserver;Database=SaasService_Identity;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false |
|||
- ConnectionStrings__SqlServerCache=Server=sqlserver;Database=SaasService_Cache;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false |
|||
ports: |
|||
- "51600:80" |
|||
|
|||
saas-service: |
|||
environment: |
|||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
|||
- ConnectionStrings__Default=Server=sqlserver;Database=SaasService_ModuleDb;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false |
|||
- ConnectionStrings__AbpSettingManagement=Server=sqlserver;Database=SaasService_Identity;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false |
|||
- ConnectionStrings__AbpPermissionManagement=Server=sqlserver;Database=SaasService_Identity;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false |
|||
- ConnectionStrings__AbpAuditLogging=Server=sqlserver;Database=SaasService_Identity;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false |
|||
- ConnectionStrings__SqlServerCache=Server=sqlserver;Database=SaasService_Cache;Trusted_Connection=True;User=sa;Password=yourStrong(!)Password;Integrated Security=false |
|||
- AuthServer__Authority=http://identity-server |
|||
ports: |
|||
- "51601:80" |
|||
@ -1,25 +0,0 @@ |
|||
version: '3.4' |
|||
|
|||
services: |
|||
sqlserver: |
|||
image: mcr.microsoft.com/mssql/server |
|||
volumes: |
|||
- dbdata:/var/opt/mssql |
|||
|
|||
identity-server: |
|||
build: |
|||
context: ../../ |
|||
dockerfile: templates/service/host/IdentityServerHost/Dockerfile |
|||
depends_on: |
|||
- sqlserver |
|||
|
|||
saas-service: |
|||
build: |
|||
context: ../../ |
|||
dockerfile: templates/service/host/EShopOnAbp.SaasService.Host/Dockerfile |
|||
depends_on: |
|||
- sqlserver |
|||
- identity-server |
|||
|
|||
volumes: |
|||
dbdata: |
|||
@ -1,32 +0,0 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> |
|||
|
|||
<Import Project="..\..\common.props" /> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>net5.0</TargetFramework> |
|||
<BlazorWebAssemblyLoadAllGlobalizationData>true</BlazorWebAssemblyLoadAllGlobalizationData> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Blazorise.Bootstrap" Version="0.9.3.5" /> |
|||
<PackageReference Include="Blazorise.Icons.FontAwesome" Version="0.9.3.5" /> |
|||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="5.0.*" /> |
|||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="5.0.*" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Volo.Abp.Autofac.WebAssembly" Version="4.3.3" /> |
|||
<PackageReference Include="Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme" Version="4.3.3" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Volo.Abp.Identity.Blazor.WebAssembly" Version="4.3.3" /> |
|||
<PackageReference Include="Volo.Abp.Account.Blazor" Version="4.3.3" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\EShopOnAbp.SaasService.Host.Shared\EShopOnAbp.SaasService.Host.Shared.csproj" /> |
|||
<ProjectReference Include="..\..\src\EShopOnAbp.SaasService.Blazor.WebAssembly\EShopOnAbp.SaasService.Blazor.WebAssembly.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -1,3 +0,0 @@ |
|||
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd"> |
|||
<ConfigureAwait ContinueOnCapturedContext="false" /> |
|||
</Weavers> |
|||
@ -1,30 +0,0 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> |
|||
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. --> |
|||
<xs:element name="Weavers"> |
|||
<xs:complexType> |
|||
<xs:all> |
|||
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1"> |
|||
<xs:complexType> |
|||
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" /> |
|||
</xs:complexType> |
|||
</xs:element> |
|||
</xs:all> |
|||
<xs:attribute name="VerifyAssembly" type="xs:boolean"> |
|||
<xs:annotation> |
|||
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation> |
|||
</xs:annotation> |
|||
</xs:attribute> |
|||
<xs:attribute name="VerifyIgnoreCodes" type="xs:string"> |
|||
<xs:annotation> |
|||
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation> |
|||
</xs:annotation> |
|||
</xs:attribute> |
|||
<xs:attribute name="GenerateXsd" type="xs:boolean"> |
|||
<xs:annotation> |
|||
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation> |
|||
</xs:annotation> |
|||
</xs:attribute> |
|||
</xs:complexType> |
|||
</xs:element> |
|||
</xs:schema> |
|||
@ -1,60 +0,0 @@ |
|||
@page "/" |
|||
@using Volo.Abp.Users |
|||
@using Volo.Abp.MultiTenancy |
|||
@using System.Security.Claims |
|||
@inject ICurrentUser CurrentUser |
|||
@inject ICurrentTenant CurrentTenant |
|||
@inject AuthenticationStateProvider AuthenticationStateProvider |
|||
|
|||
<h1>Welcome to SaasService!</h1> |
|||
|
|||
@if (CurrentUser.IsAuthenticated) |
|||
{ |
|||
<h3>Current User</h3> |
|||
<ul> |
|||
<li>Id: <strong>@CurrentUser.Id</strong></li> |
|||
<li>TenantId: <strong>@CurrentUser.TenantId</strong></li> |
|||
<li>UserName: <strong>@CurrentUser.UserName</strong></li> |
|||
<li>Name: <strong>@CurrentUser.Name</strong></li> |
|||
<li>SurName: <strong>@CurrentUser.SurName</strong></li> |
|||
<li>Email: <strong>@CurrentUser.Email</strong></li> |
|||
<li>EmailVerified: <strong>@CurrentUser.EmailVerified</strong></li> |
|||
<li>PhoneNumber: <strong>@CurrentUser.PhoneNumber</strong></li> |
|||
<li>PhoneNumberVerified: <strong>@CurrentUser.PhoneNumberVerified</strong></li> |
|||
<li>Roles: <strong>@CurrentUser.Roles.JoinAsString(", ")</strong></li> |
|||
</ul> |
|||
} |
|||
|
|||
@if (_claims != null) |
|||
{ |
|||
<h3>Current Claims</h3> |
|||
<ul> |
|||
@foreach (var claim in _claims) |
|||
{ |
|||
<li>@claim.Type: @claim.Value</li> |
|||
} |
|||
</ul> |
|||
} |
|||
|
|||
@if (CurrentTenant.IsAvailable) |
|||
{ |
|||
<h3>Current Tenant</h3> |
|||
<ul> |
|||
<li>Id: <strong>@CurrentTenant.Id</strong></li> |
|||
<li>Name: <strong>@CurrentTenant.Name</strong></li> |
|||
</ul> |
|||
} |
|||
|
|||
@code |
|||
{ |
|||
private IEnumerable<Claim> _claims; |
|||
|
|||
protected async override Task OnInitializedAsync() |
|||
{ |
|||
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync(); |
|||
if (authState.User.Identity.IsAuthenticated) |
|||
{ |
|||
_claims = authState.User.Claims; |
|||
} |
|||
} |
|||
} |
|||
@ -1,24 +0,0 @@ |
|||
using System.Threading.Tasks; |
|||
using Microsoft.AspNetCore.Components.WebAssembly.Hosting; |
|||
|
|||
namespace EShopOnAbp.SaasService.Blazor.Host |
|||
{ |
|||
public class Program |
|||
{ |
|||
public static async Task Main(string[] args) |
|||
{ |
|||
var builder = WebAssemblyHostBuilder.CreateDefault(args); |
|||
|
|||
var application = builder.AddApplication<SaasServiceBlazorHostModule>(options => |
|||
{ |
|||
options.UseAutofac(); |
|||
}); |
|||
|
|||
var host = builder.Build(); |
|||
|
|||
await application.InitializeAsync(host.Services); |
|||
|
|||
await host.RunAsync(); |
|||
} |
|||
} |
|||
} |
|||
@ -1,29 +0,0 @@ |
|||
{ |
|||
"iisSettings": { |
|||
"windowsAuthentication": false, |
|||
"anonymousAuthentication": true, |
|||
"iisExpress": { |
|||
"applicationUrl": "https://localhost:44307", |
|||
"sslPort": 44307 |
|||
} |
|||
}, |
|||
"profiles": { |
|||
"IIS Express": { |
|||
"commandName": "IISExpress", |
|||
"launchBrowser": true, |
|||
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
} |
|||
}, |
|||
"EShopOnAbp.SaasService.Blazor": { |
|||
"commandName": "Project", |
|||
"launchBrowser": true, |
|||
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", |
|||
"applicationUrl": "https://localhost:44307", |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -1,12 +0,0 @@ |
|||
using AutoMapper; |
|||
|
|||
namespace EShopOnAbp.SaasService.Blazor.Host |
|||
{ |
|||
public class SaasServiceBlazorHostAutoMapperProfile : Profile |
|||
{ |
|||
public SaasServiceBlazorHostAutoMapperProfile() |
|||
{ |
|||
//Define your AutoMapper configuration here for the Blazor project.
|
|||
} |
|||
} |
|||
} |
|||
@ -1,17 +0,0 @@ |
|||
using Volo.Abp.Bundling; |
|||
|
|||
namespace EShopOnAbp.SaasService.Blazor.Host |
|||
{ |
|||
public class SaasServiceBlazorHostBundleContributor : IBundleContributor |
|||
{ |
|||
public void AddScripts(BundleContext context) |
|||
{ |
|||
|
|||
} |
|||
|
|||
public void AddStyles(BundleContext context) |
|||
{ |
|||
context.Add("main.css", true); |
|||
} |
|||
} |
|||
} |
|||
@ -1,97 +0,0 @@ |
|||
using System; |
|||
using System.Net.Http; |
|||
using Blazorise.Bootstrap; |
|||
using Blazorise.Icons.FontAwesome; |
|||
using Microsoft.AspNetCore.Components.WebAssembly.Hosting; |
|||
using Microsoft.Extensions.Configuration; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using EShopOnAbp.SaasService.Blazor.WebAssembly; |
|||
using Volo.Abp.Account.Blazor; |
|||
using Volo.Abp.AspNetCore.Components.Web.BasicTheme.Themes.Basic; |
|||
using Volo.Abp.AspNetCore.Components.Web.Theming.Routing; |
|||
using Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme; |
|||
using Volo.Abp.Autofac.WebAssembly; |
|||
using Volo.Abp.AutoMapper; |
|||
using Volo.Abp.Identity.Blazor.WebAssembly; |
|||
using Volo.Abp.Modularity; |
|||
using Volo.Abp.UI.Navigation; |
|||
|
|||
namespace EShopOnAbp.SaasService.Blazor.Host |
|||
{ |
|||
[DependsOn( |
|||
typeof(AbpAutofacWebAssemblyModule), |
|||
typeof(AbpAspNetCoreComponentsWebAssemblyBasicThemeModule), |
|||
typeof(AbpIdentityBlazorWebAssemblyModule), |
|||
typeof(AbpAccountBlazorModule), |
|||
typeof(SaasServiceBlazorWebAssemblyModule) |
|||
)] |
|||
public class SaasServiceBlazorHostModule : AbpModule |
|||
{ |
|||
public override void ConfigureServices(ServiceConfigurationContext context) |
|||
{ |
|||
var environment = context.Services.GetSingletonInstance<IWebAssemblyHostEnvironment>(); |
|||
var builder = context.Services.GetSingletonInstance<WebAssemblyHostBuilder>(); |
|||
|
|||
ConfigureAuthentication(builder); |
|||
ConfigureHttpClient(context, environment); |
|||
ConfigureBlazorise(context); |
|||
ConfigureRouter(context); |
|||
ConfigureUI(builder); |
|||
ConfigureMenu(context); |
|||
ConfigureAutoMapper(context); |
|||
} |
|||
|
|||
private void ConfigureRouter(ServiceConfigurationContext context) |
|||
{ |
|||
Configure<AbpRouterOptions>(options => |
|||
{ |
|||
options.AppAssembly = typeof(SaasServiceBlazorHostModule).Assembly; |
|||
}); |
|||
} |
|||
|
|||
private void ConfigureMenu(ServiceConfigurationContext context) |
|||
{ |
|||
Configure<AbpNavigationOptions>(options => |
|||
{ |
|||
options.MenuContributors.Add(new SaasServiceHostMenuContributor()); |
|||
}); |
|||
} |
|||
|
|||
private void ConfigureBlazorise(ServiceConfigurationContext context) |
|||
{ |
|||
context.Services |
|||
.AddBootstrapProviders() |
|||
.AddFontAwesomeIcons(); |
|||
} |
|||
|
|||
private static void ConfigureAuthentication(WebAssemblyHostBuilder builder) |
|||
{ |
|||
builder.Services.AddOidcAuthentication(options => |
|||
{ |
|||
builder.Configuration.Bind("AuthServer", options.ProviderOptions); |
|||
options.ProviderOptions.DefaultScopes.Add("SaasService"); |
|||
}); |
|||
} |
|||
|
|||
private static void ConfigureUI(WebAssemblyHostBuilder builder) |
|||
{ |
|||
builder.RootComponents.Add<App>("#ApplicationContainer"); |
|||
} |
|||
|
|||
private static void ConfigureHttpClient(ServiceConfigurationContext context, IWebAssemblyHostEnvironment environment) |
|||
{ |
|||
context.Services.AddTransient(sp => new HttpClient |
|||
{ |
|||
BaseAddress = new Uri(environment.BaseAddress) |
|||
}); |
|||
} |
|||
|
|||
private void ConfigureAutoMapper(ServiceConfigurationContext context) |
|||
{ |
|||
Configure<AbpAutoMapperOptions>(options => |
|||
{ |
|||
options.AddMaps<SaasServiceBlazorHostModule>(); |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
@ -1,9 +0,0 @@ |
|||
using Volo.Abp.Ui.Branding; |
|||
|
|||
namespace EShopOnAbp.SaasService.Blazor.Host |
|||
{ |
|||
public class SaasServiceHostBrandingProvider : DefaultBrandingProvider |
|||
{ |
|||
public override string AppName => "SaasService"; |
|||
} |
|||
} |
|||
@ -1,31 +0,0 @@ |
|||
using System.Threading.Tasks; |
|||
using EShopOnAbp.SaasService.Localization; |
|||
using Volo.Abp.UI.Navigation; |
|||
|
|||
namespace EShopOnAbp.SaasService.Blazor.Host |
|||
{ |
|||
public class SaasServiceHostMenuContributor : IMenuContributor |
|||
{ |
|||
public Task ConfigureMenuAsync(MenuConfigurationContext context) |
|||
{ |
|||
if(context.Menu.DisplayName != StandardMenus.Main) |
|||
{ |
|||
return Task.CompletedTask; |
|||
} |
|||
|
|||
var l = context.GetLocalizer<SaasServiceResource>(); |
|||
|
|||
context.Menu.Items.Insert( |
|||
0, |
|||
new ApplicationMenuItem( |
|||
"SaasService.Home", |
|||
l["Menu:Home"], |
|||
"/", |
|||
icon: "fas fa-home" |
|||
) |
|||
); |
|||
|
|||
return Task.CompletedTask; |
|||
} |
|||
} |
|||
} |
|||
@ -1,11 +0,0 @@ |
|||
@using System.Net.Http |
|||
@using Microsoft.AspNetCore.Components.Authorization |
|||
@using Microsoft.AspNetCore.Components.Forms |
|||
@using Microsoft.AspNetCore.Components.Routing |
|||
@using Microsoft.AspNetCore.Components.Web |
|||
@using Microsoft.AspNetCore.Components.WebAssembly.Http |
|||
@using Microsoft.JSInterop |
|||
@using Volo.Abp.AspNetCore.Components.WebAssembly |
|||
@using EShopOnAbp.SaasService.Blazor |
|||
@using Blazorise |
|||
@using Blazorise.DataGrid |
|||
@ -1,3 +0,0 @@ |
|||
{ |
|||
|
|||
} |
|||
@ -1,12 +0,0 @@ |
|||
{ |
|||
"AuthServer": { |
|||
"Authority": "https://localhost:44348", |
|||
"ClientId": "SaasService_Blazor", |
|||
"ResponseType": "code" |
|||
}, |
|||
"RemoteServices": { |
|||
"Default": { |
|||
"BaseUrl": "https://localhost:44396" |
|||
} |
|||
} |
|||
} |
|||
|
Before Width: | Height: | Size: 31 KiB |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,29 +0,0 @@ |
|||
<!DOCTYPE html> |
|||
<html> |
|||
|
|||
<head> |
|||
<meta charset="utf-8" /> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> |
|||
<title>EShopOnAbp.SaasService.Blazor</title> |
|||
<base href="/" /> |
|||
|
|||
<!--ABP:Styles--> |
|||
<link href="global.css?_v=637574532170271862" rel="stylesheet"/> |
|||
<link href="main.css" rel="stylesheet"/> |
|||
<!--/ABP:Styles--> |
|||
</head> |
|||
|
|||
<body class="abp-application-layout bg-light"> |
|||
<div id="ApplicationContainer"> |
|||
<div class="spinner"> |
|||
<div class="double-bounce1"></div> |
|||
<div class="double-bounce2"></div> |
|||
</div> |
|||
</div> |
|||
|
|||
<!--ABP:Scripts--> |
|||
<script src="global.js?_v=637574532173852047"></script> |
|||
<!--/ABP:Scripts--> |
|||
|
|||
</body> |
|||
</html> |
|||
@ -1,48 +0,0 @@ |
|||
.spinner { |
|||
width: 40px; |
|||
height: 40px; |
|||
display: block; |
|||
position: fixed; |
|||
top: calc( 50% - ( 40px / 2) ); |
|||
right: calc( 50% - ( 40px / 2) ); |
|||
} |
|||
|
|||
.double-bounce1, .double-bounce2 { |
|||
width: 100%; |
|||
height: 100%; |
|||
border-radius: 50%; |
|||
background-color: #333; |
|||
opacity: 0.6; |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
-webkit-animation: sk-bounce 2.0s infinite ease-in-out; |
|||
animation: sk-bounce 2.0s infinite ease-in-out; |
|||
} |
|||
|
|||
.double-bounce2 { |
|||
-webkit-animation-delay: -1.0s; |
|||
animation-delay: -1.0s; |
|||
} |
|||
|
|||
@-webkit-keyframes sk-bounce { |
|||
0%, 100% { |
|||
-webkit-transform: scale(0.0) |
|||
} |
|||
|
|||
50% { |
|||
-webkit-transform: scale(1.0) |
|||
} |
|||
} |
|||
|
|||
@keyframes sk-bounce { |
|||
0%, 100% { |
|||
transform: scale(0.0); |
|||
-webkit-transform: scale(0.0); |
|||
} |
|||
|
|||
50% { |
|||
transform: scale(1.0); |
|||
-webkit-transform: scale(1.0); |
|||
} |
|||
} |
|||
@ -1,10 +0,0 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<Import Project="..\..\common.props" /> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>netstandard2.0</TargetFramework> |
|||
<RootNamespace>EShopOnAbp.SaasService</RootNamespace> |
|||
</PropertyGroup> |
|||
|
|||
</Project> |
|||
@ -1,3 +0,0 @@ |
|||
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd"> |
|||
<ConfigureAwait ContinueOnCapturedContext="false" /> |
|||
</Weavers> |
|||
@ -1,30 +0,0 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> |
|||
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. --> |
|||
<xs:element name="Weavers"> |
|||
<xs:complexType> |
|||
<xs:all> |
|||
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1"> |
|||
<xs:complexType> |
|||
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" /> |
|||
</xs:complexType> |
|||
</xs:element> |
|||
</xs:all> |
|||
<xs:attribute name="VerifyAssembly" type="xs:boolean"> |
|||
<xs:annotation> |
|||
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation> |
|||
</xs:annotation> |
|||
</xs:attribute> |
|||
<xs:attribute name="VerifyIgnoreCodes" type="xs:string"> |
|||
<xs:annotation> |
|||
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation> |
|||
</xs:annotation> |
|||
</xs:attribute> |
|||
<xs:attribute name="GenerateXsd" type="xs:boolean"> |
|||
<xs:annotation> |
|||
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation> |
|||
</xs:annotation> |
|||
</xs:attribute> |
|||
</xs:complexType> |
|||
</xs:element> |
|||
</xs:schema> |
|||
@ -1,10 +0,0 @@ |
|||
namespace EShopOnAbp.SaasService.MultiTenancy |
|||
{ |
|||
public static class MultiTenancyConsts |
|||
{ |
|||
/* Enable/disable multi-tenancy in a single point |
|||
* to test your module with multi-tenancy. |
|||
*/ |
|||
public const bool IsEnabled = false; |
|||
} |
|||
} |
|||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue