Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
479 commits
Select commit Hold shift + click to select a range
4ccd22e
Fixed Settings modal incorrect behaviour (#2361)
jsorohova Dec 15, 2023
33faaf2
Packages update - custom widgets overrides default widget fix (#2363)
JMach1 Jan 9, 2024
6ec32ea
Increase dev-portal version to 2.25.0
mrcarlosdev Jan 10, 2024
e7555bc
skipWorkspaces query param added to APIs & Products services (#2366)
JMach1 Jan 10, 2024
3be3494
Fixed error when changing OAuth flow (#2368)
malincrist Jan 18, 2024
2153f6d
Fixed: custom HTML widget not rendering on published portals (#2370)
malincrist Jan 18, 2024
72c6ee5
Validation fixes (#2374)
jsorohova Jan 22, 2024
8987d1e
Fixed Link media functionality (#2377)
jsorohova Jan 25, 2024
bb5bfcd
Fixed: error when loading operations grouped by tags without apiId (#…
malincrist Jan 25, 2024
0a9f004
Fixed: error when loading subscriptions without user signed in (#2375)
malincrist Jan 25, 2024
8aa3ba5
iframe sandbox allowed tags fixed for safari
JMach1 Jan 22, 2024
2564ba8
Fixed subscription header always required (#2382)
malincrist Jan 29, 2024
7991ad3
use of outdated custom widget scaffolder by npx fixed (#2383)
JMach1 Jan 29, 2024
db434b0
Added role view dropdown (#2378)
jsorohova Jan 29, 2024
f18cdcb
Update to 2.26 version
mrcarlosdev Jan 27, 2024
e436d33
Disable reset password for signed in users (#2308)
malincrist Jan 30, 2024
f8293ce
Fixed heavily truncated description for APIs and Products (#2386)
malincrist Jan 30, 2024
5944096
Added mime type to media linking (#2390)
jsorohova Jan 31, 2024
daad01a
GitHub CI permissions change (#2393)
jsorohova Feb 2, 2024
71beff2
Paperbits version bump (#2391)
jsorohova Feb 2, 2024
43c7f22
Fixed media empty permalink errors (#2395)
jsorohova Feb 6, 2024
240d765
Bumped paperbits version to sync with the managed (#2397)
jsorohova Feb 6, 2024
3ce80a8
Fixed non-working anchors for definitions, made multiple complex sche…
jsorohova Feb 8, 2024
905906c
Fixed management API version mismatch (#2385)
jsorohova Feb 8, 2024
53d44af
Added UI interface for multiple auth servers (#2337)
malincrist Feb 8, 2024
aec1389
Upgrade dependency follow-redirects (#2401)
f-alizada Feb 12, 2024
94a94cb
Commented out markdown announcement
jsorohova Feb 13, 2024
a95dbed
Deleted markdown announcement slide
jsorohova Feb 13, 2024
c16975f
Fixed default home page menu text color (#2406)
jsorohova Feb 14, 2024
092691a
Bump undici from 5.28.2 to 5.28.3 (#2410)
dependabot[bot] Feb 19, 2024
050ce30
Fixed: registered apiProducts widget correctly (#2411)
malincrist Feb 19, 2024
db05423
Fixed validation behaviour (#2412)
jsorohova Feb 19, 2024
0644400
Used naming cinvention with dash (#2414)
malincrist Feb 19, 2024
a32f74f
fixed api products widget editor registration (#2416)
malincrist Feb 20, 2024
ae2d6a5
Improved logging around AAD B2C flows (#2402)
malincrist Feb 20, 2024
64ee99e
Move default media files to regional storage (#2407)
malincrist Feb 23, 2024
fb398af
Alt tag for images in the Media modal (#2423)
jsorohova Feb 28, 2024
5273bc1
Fixed: API not loaded the first time (#2424)
malincrist Feb 29, 2024
099960c
aria-label attributes for fields with custom labels (#2427)
jsorohova Feb 29, 2024
3c6979d
Fixed multiple media files deletion (#2434)
jsorohova Mar 13, 2024
65a7f32
Update issue templates (#2436)
sthirthala Mar 16, 2024
f1eaab8
Create cleanUpOpenedIssues.yml
mrcarlosdev Mar 25, 2024
68cc0c7
Update cleanUpOpenedIssues.yml
mrcarlosdev Mar 25, 2024
e148c5a
Update cleanUpOpenedIssues.yml
mrcarlosdev Mar 25, 2024
03910e6
Update cleanUpOpenedIssues.yml
mrcarlosdev Mar 25, 2024
84036f2
Update cleanUpOpenedIssues.yml
mrcarlosdev Mar 25, 2024
ca5ec73
Update cleanUpOpenedIssues.yml
mrcarlosdev Mar 25, 2024
a20d890
Update cleanUpOpenedIssues.yml
mrcarlosdev Mar 25, 2024
d7536c7
Update cleanUpOpenedIssues.yml
mrcarlosdev Mar 25, 2024
dcb795a
Fixed non-closing list of APIs dropdown widget (#2450)
jsorohova Apr 3, 2024
2696260
Prepare release 2.27
mrcarlosdev Apr 3, 2024
1242771
Update package-lock.json
mrcarlosdev Apr 3, 2024
7019460
Migration script: added recursive download of media data from content…
rkolesnikovDX Apr 9, 2024
91916fb
Fixed overlapping API dropdown (#2459)
jsorohova Apr 10, 2024
e5cee7e
API Dropdown - navigation fix (#2460)
JMach1 Apr 11, 2024
4cce315
Revert "Move default media files to regional storage (#2407)" (#2461)
malincrist Apr 12, 2024
4bd5fee
Fix scripts.v2: migrate & capture (#2465)
rkolesnikovDX Apr 15, 2024
0a97f91
Fixed auth servers in test console on switching apis (#2471)
ygrik Apr 23, 2024
7a5d78d
Fixed enum values processing for console operations query and templat…
jsorohova May 1, 2024
bf275ea
Fixed toast notifications to appear on top of the Fluent UI overlays …
jsorohova May 15, 2024
3ac5054
Fixed do not show AAD config message in runtime for sigin social widg…
ygrik May 16, 2024
55fb131
FUI - List of operations (#2475)
jsorohova May 20, 2024
62343d1
FUI - List of operations (#2490)
JMach1 May 21, 2024
1ff3692
FUI - API details (#2489)
jsorohova May 21, 2024
3005804
FUI - APIs list (#2431)
JMach1 May 28, 2024
450a19d
FUI - Products list (#2492)
JMach1 May 28, 2024
8504996
FUI - list of APIs in a Product (#2493)
JMach1 May 28, 2024
ef8b129
FUI - filters for list pages (#2496)
JMach1 May 29, 2024
1ae0ea6
Fixed Custom widgets CORS issue in Safari (#2498)
JMach1 May 31, 2024
25d7a94
FUI - Redesign toggle (#2500)
jsorohova Jun 5, 2024
65b0af3
FUI - APIs list Dropdown (#2501)
JMach1 Jun 10, 2024
ea2765a
FUI - Products list Dropdown (#2503)
JMach1 Jun 12, 2024
04f2860
FUI - Redesign toggle - Stickness adjustment (#2508)
jsorohova Jun 13, 2024
0444623
FUI - Product Subscriptions list (#2510)
JMach1 Jun 17, 2024
b6b92a1
FUI - Subscribe to a Product (#2511)
JMach1 Jun 17, 2024
164df63
FUI - Product details (#2513)
JMach1 Jun 18, 2024
2690188
Added pagination and filter support for subscriptions in the test con…
malincrist Jun 20, 2024
cd94890
Use basic auth for change password (#2396)
malincrist Jun 21, 2024
8085888
FUI - Operation details widget (#2517)
jsorohova Jun 21, 2024
3780b45
FUI - Sign in (#2518)
JMach1 Jun 25, 2024
02fbe2d
FUI - Sign In Social (#2519)
JMach1 Jun 26, 2024
31d4281
FUI - Profile (#2520)
JMach1 Jun 26, 2024
48bf7ac
FUI - Subscriptions (#2521)
JMach1 Jun 27, 2024
5c71abc
FUI - minor fixes found in testing in Managed portal (#2523)
JMach1 Jul 1, 2024
ed0196f
FUI - pagination "hasNextPage" variant added (#2524)
JMach1 Jul 1, 2024
b9021d4
FUI - Operation details - GQL (#2525)
jsorohova Jul 1, 2024
f61b804
FUI - Validation summary (#2528)
JMach1 Jul 3, 2024
f42b4ae
FUI - Sign Up + Captcha (#2529)
JMach1 Jul 8, 2024
ba9eacd
FUI - Reset password (#2530)
JMach1 Jul 9, 2024
b5170ea
Bumped version to 2.29 (#2531)
mpodriezov Jul 10, 2024
2e3aa99
browser specific iframe sandbox tokens support (#2514)
JMach1 Jul 11, 2024
a9647d8
FUI - Tags filtering for APIs Group by Tag view (#2533)
JMach1 Jul 15, 2024
6680214
Reverted accidential redesign merge (#2532)
jsorohova Jul 15, 2024
2f97d7a
FUI - Sign Up AAD (#2535)
JMach1 Jul 18, 2024
1883ec7
Create config.yml (#2536)
annaji-msft Jul 22, 2024
d770a2d
Update README.md (#2641)
annaji-msft Jul 22, 2024
db430ed
Update bug_report.md (#2647)
annaji-msft Jul 23, 2024
db32d40
What's new modal refactoring (#2657)
jsorohova Aug 16, 2024
b4a2005
Role and screen size dropdowns accessibility fix (#2659)
jsorohova Aug 16, 2024
e084e5a
Made several left nav items keyboard accessible (#2660)
jsorohova Aug 19, 2024
fb329ec
Multiple fixes for Site menu item modal (#2661)
jsorohova Aug 21, 2024
011b232
FUI - Operation console (#2655)
jsorohova Aug 21, 2024
232fcbd
FUI - Operation console
jsorohova Aug 21, 2024
8320119
Removed paging from test console subscriptions dropdown (#2664)
ygrik Aug 22, 2024
c875096
Developer portal version bump to 2.30 (#2662)
jsorohova Aug 22, 2024
68d48e6
Fixed grouping apis subscriptions in test console selector (#2665)
ygrik Aug 28, 2024
e8a9a0c
Error processing and search fixes in Admin UI (#2666)
jsorohova Aug 28, 2024
cb09f18
Added a fix for incorrect validation (#2668)
jsorohova Aug 29, 2024
d1e5332
CR fix (#2669)
jsorohova Aug 29, 2024
3e4c301
FUI - WS console (#2670)
jsorohova Sep 9, 2024
2f5843e
FUI - Reports page (#2672)
jsorohova Sep 12, 2024
6e7e8ae
FUI - Console body improvements and bug fixes (#2673)
jsorohova Sep 13, 2024
9436748
FUI - Console body improvements and bug fixes (#2674)
jsorohova Sep 13, 2024
cfcb371
FUI - API changelog page (#2675)
jsorohova Sep 18, 2024
4252921
FUI - Change password page (#2676)
jsorohova Sep 18, 2024
7ae7b14
FUI - Confirm password page (#2677)
jsorohova Sep 20, 2024
9a5038f
Fixed integration user errors (#2679)
jsorohova Sep 24, 2024
5168041
FUI - Covering No data scenarios and small fixes (#2680)
jsorohova Sep 25, 2024
7f3bc84
FUI - SOAP headers and console bug fixes (#2681)
jsorohova Sep 26, 2024
b78fee0
Fixed custom widgets editor configuration view (#2686)
rkolesnikovDX Oct 1, 2024
8b3e3d6
Added allow-same-origin as a settings option for custom widgets (#2688)
mpodriezov Oct 2, 2024
a09fd6d
Update package version to 2.31.0 (#2689)
rkolesnikovDX Oct 2, 2024
2d8df87
Fixed nonImageDetailModal to pass schema validation on saving of link…
rkolesnikovDX Oct 3, 2024
50e64dc
Packages and styles upgrade (#2692)
ygrik Oct 4, 2024
ab0b035
Merged PR 10992070: fix(sitemenu): Fix linking for image site menu ->…
Oct 4, 2024
a640a11
Merged PR 11000481: fix(media): Fixed reference url is not updatable
Oct 7, 2024
f1d2811
Fixed styles after last packages update (#2694)
ygrik Oct 7, 2024
0fca847
merge from master
ygrik Oct 7, 2024
2c513b6
Merge branch 'master' into fui/master-merge
ygrik Oct 8, 2024
02ab6e4
Update Paperbits packages and styles in api list widget (#2696)
ygrik Oct 11, 2024
99b4048
Fixed styles after packages upgrade (#2697)
jsorohova Oct 14, 2024
529154e
Merge conflict fixes
jsorohova Oct 14, 2024
a7e0366
Fixed tabs styles and editor alignments (#2698)
jsorohova Oct 14, 2024
167b00b
Merge branch 'master' of https://github.com/Azure/api-management-deve…
jsorohova Oct 14, 2024
2bc2607
Developer portal version bump to 2.32 (#2699)
jsorohova Oct 18, 2024
34c6d5e
Merge branch 'master' into fui/master
ygrik Oct 18, 2024
db89280
Migrate design-time and editor to React (#2700)
ygrik Oct 18, 2024
704c2b0
clean up
ygrik Oct 18, 2024
1acd67e
FUI - Moving to the native elements - Sign in and Product pages (#2702)
jsorohova Oct 21, 2024
7f4abfc
FUI - Moving to the native elements - Required label (#2704)
jsorohova Oct 22, 2024
f148866
FUI - Moving to the native elements - Required label - Added missed v…
jsorohova Oct 22, 2024
0406e02
Signup migrate to simple elements, captcha redesign (#2703)
ygrik Oct 22, 2024
cf6ccc7
chore: Remove unused workflow (#2706)
tomkerkhove Oct 23, 2024
eaa11a7
Fixed publishing
ygrik Oct 23, 2024
0717181
FUI - Moving to the native elements - API list (#2707)
jsorohova Oct 24, 2024
756428f
FUI - Moving to the native elements - Product list (#2708)
jsorohova Oct 24, 2024
4993d15
Fixed sign up social widget
ygrik Oct 24, 2024
932fa6c
Merge branch 'fui/master' of https://github.com/Azure/api-management-…
ygrik Oct 24, 2024
25ead0e
Accessibility fixes for new Admin UI (#2710)
jsorohova Oct 25, 2024
ccee94c
Migrated reset password widget and editor
ygrik Oct 28, 2024
26c464f
Migrated change password widget and editor
ygrik Oct 28, 2024
82dd16b
Migrated confirm password to editor runtime
ygrik Oct 30, 2024
93ca22a
Merge
jsorohova Oct 30, 2024
cbb3f00
Merge branch 'fui/master' of https://github.com/Azure/api-management-…
jsorohova Oct 30, 2024
9c39ffe
FUI - API products (#2712)
jsorohova Oct 30, 2024
92a8fe8
Migrated subscription widget
ygrik Oct 31, 2024
e5d91c2
Merge branch 'fui/master' of https://github.com/Azure/api-management-…
ygrik Oct 31, 2024
75f1ff5
Migrated profile widget editor runtime to React
ygrik Oct 31, 2024
7a4ebfd
Paperbits packages upgrade to 0.1.629 (#2713)
jsorohova Nov 1, 2024
0312272
Merge master into FUI
jsorohova Nov 1, 2024
e6ddac1
Migrated signin social to React editor runtime
ygrik Nov 5, 2024
89ad910
Migrated details of api widget
ygrik Nov 6, 2024
0e7cbed
migrated api history widget to React editor runtime
ygrik Nov 7, 2024
24434e6
migrated operation list to React design runtime
ygrik Nov 8, 2024
ac85c6e
remove migrated templates
ygrik Nov 8, 2024
dbc845d
Update license reference (#2716)
emmanuel-ferdman Nov 12, 2024
f308924
Fixed pages and layouts validation and added No items text when searc…
jsorohova Nov 13, 2024
a7d7d04
Fixed terms of use widget
ygrik Nov 13, 2024
8e1cd7d
FUI - Operation details - Moving to native elements (#2718)
jsorohova Nov 14, 2024
30dd288
Migrated to simple elements and implemented cancel for editing mode f…
ygrik Nov 14, 2024
3eb47ce
Merge branch 'fui/master' of https://github.com/Azure/api-management-…
ygrik Nov 14, 2024
ff61de4
FUI - Reports - Moving to native elements (#2721)
jsorohova Nov 15, 2024
a39e3fa
Fixed forms styles (#2722)
ygrik Nov 18, 2024
38a7281
Fixed layouts validation (#2723)
jsorohova Nov 19, 2024
d852aae
Fixed tooltip button position (#2724)
ygrik Nov 20, 2024
43aea55
FUI - React runtime files, Search field and Profile page adjustments …
jsorohova Nov 22, 2024
d47c541
Master branch merge (#2726)
jsorohova Nov 22, 2024
a82da3e
FUI - React runtime files - Products and User (#2728)
jsorohova Nov 28, 2024
38c03e4
FUI - React runtime files - Renaming (#2729)
jsorohova Nov 29, 2024
6b7cba8
Added new password validation must be different from old (#2730)
ygrik Dec 5, 2024
e8280ab
Update package.json engines to require Node pre v20 (#2731)
Onatolich Dec 6, 2024
ca939e2
Add IDEA specific files to .gitignore (#2732)
Onatolich Dec 10, 2024
33cd7ee
Fixed filtering by tag for apis widget (#2735)
ygrik Dec 12, 2024
8f2246f
Fixed editor update event propagate to widget (#2737)
ygrik Dec 12, 2024
22d9967
Fixed:
ygrik Dec 16, 2024
666ab26
Added validation for required parameters and headers in Operation con…
ygrik Dec 17, 2024
301c2dc
Added reveal secret button and removed tags from HTTP response conten…
ygrik Dec 19, 2024
8fc2f7d
FUI - Removed autocomplete for search to fix Edge behaviour (#2742)
jsorohova Jan 14, 2025
d6344c1
Fixed examples displaying in the Operation details widget in knockout…
jsorohova Jan 15, 2025
db6831c
Fixed Page name displaying in admin top panel (#2749)
jsorohova Jan 16, 2025
d1cfd3e
Paperbits packages upgrade to 0.1.632 (#2748)
jsorohova Jan 17, 2025
63dcf3f
Master merge into fui/master (#2750)
jsorohova Jan 17, 2025
699b2c0
FUI - Fixed GraphQL console fields (#2751)
jsorohova Jan 17, 2025
0bb88f7
FUI - Visual code improvements (#2752)
jsorohova Jan 17, 2025
078c1e4
Implemented service worker to intercept network traces, added trackin…
ygrik Jan 18, 2025
5083251
FUI - Fixed invalid query variables format (#2753)
jsorohova Jan 20, 2025
d4ebd82
Popup over collapsible menu z-index fix (#2754)
ygrik Jan 21, 2025
786c664
Merge master
jsorohova Jan 22, 2025
8c50312
FUI - Fixed multiple bugs
jsorohova Jan 28, 2025
9b56c5f
FUI - Fixed multiple bugs (#2757)
jsorohova Jan 28, 2025
9ce624e
FUI - Fixed font not being customizable
jsorohova Jan 29, 2025
de39b4e
Merge master
jsorohova Jan 29, 2025
d17ca61
FUI - Fixed font not being customizable (#2758)
jsorohova Jan 29, 2025
0589efd
FUI - Getting language from content-type header in GQL console
jsorohova Jan 30, 2025
14e2188
Merged fui master
jsorohova Jan 30, 2025
c873e6b
FUI - Getting language from content-type header in GQL console (#2759)
jsorohova Jan 30, 2025
997b2a4
FUI - Fixed get header function
jsorohova Jan 30, 2025
91adf1e
Merge conflict fix
jsorohova Jan 30, 2025
a50be59
FUI - Removed setting language for the response
jsorohova Jan 30, 2025
321a51c
Updated packages and GQL response formatting
ygrik Feb 11, 2025
f7fce14
Added runtime redesign content snapshot
ygrik Feb 13, 2025
6841a4f
Fixed sign in button width
ygrik Feb 18, 2025
0ac57bf
Fixed required styles for parameters in test console
ygrik Feb 19, 2025
d88b1ea
Changed image uris in the default content (#2760)
rkolesnikovDX Feb 20, 2025
29bf030
FUI - Pagination rework for API and Product lists (#2770)
jsorohova Feb 21, 2025
f592ff3
Updated operations layout.
alzaslon Feb 22, 2025
9c07e58
Upgraded libraries.
alzaslon Feb 23, 2025
9320a56
Upgraded libraries.
alzaslon Feb 24, 2025
3cb6797
FUI - Pagination accessibility adjustments (#2772)
jsorohova Feb 24, 2025
41d45fb
FUI - Scrollable tables and fixed form data inputs (#2773)
jsorohova Feb 25, 2025
f5d45cd
FUI - Margin fixes and updated template file (#2774)
jsorohova Feb 26, 2025
54be238
Updated picture URLs in the default template.
alzaslon Feb 26, 2025
5d51978
Updated labels on signup form buttons.
alzaslon Feb 26, 2025
5de1d4a
FUI - Redesign enabling logging (#2775)
jsorohova Feb 27, 2025
69707c0
FUI - Redesign enabling logging in runtime (#2776)
jsorohova Mar 4, 2025
6f885a8
Merge branch 'master' of https://github.com/Azure/api-management-deve…
jsorohova Mar 4, 2025
755a417
Reverted default.json file content
jsorohova Mar 4, 2025
070fd45
FUI - Captcha size and custom widgets configs load fixes
jsorohova Mar 5, 2025
1ad29c1
Fixing failing e2e tests
jsorohova Mar 5, 2025
2a1106d
maxDiffPixels property fix
jsorohova Mar 6, 2025
abab91d
FUI - Added support to reset portal to old default.json with feature …
jsorohova Mar 6, 2025
9bf6821
FUI - Setting for enabling new or old theme (#2778)
jsorohova Mar 10, 2025
45b9859
FUI - GQL console WS part (#2779)
jsorohova Mar 11, 2025
0d16443
Try/catch-es for isRedesignEnabled setting (#2780)
jsorohova Mar 11, 2025
dea0a26
Applications - List widget
jsorohova Mar 18, 2025
a52256c
Merge branch 'master' of https://github.com/Azure/api-management-deve…
jsorohova Mar 26, 2025
8d7c56f
Applications list widget
jsorohova Mar 26, 2025
683ebf5
Merge branch 'master' of https://github.com/Azure/api-management-deve…
jsorohova Mar 28, 2025
abf7076
Applications details widget
jsorohova Apr 8, 2025
9d0c198
Merge branch 'master' of https://github.com/Azure/api-management-deve…
jsorohova Apr 8, 2025
4faa0a3
Package lock file
jsorohova Apr 8, 2025
ddae7d9
Merge branch 'master' of https://github.com/Azure/api-management-deve…
jsorohova Apr 9, 2025
def5d37
Application data
jsorohova Apr 10, 2025
7fed5f4
Application details
jsorohova Apr 15, 2025
3c6545d
Removed console logs
jsorohova Apr 15, 2025
9db3423
Reverting tests image change
jsorohova Apr 16, 2025
daebfc3
Reverting tests image change
jsorohova Apr 16, 2025
822ace3
Feature flag for applications
jsorohova Apr 16, 2025
3f6c973
Applications - added error messages and default content
jsorohova May 6, 2025
98f652e
Applications - Token URL column and error handling improvements
jsorohova May 13, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/apim.design.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ import { ResetPasswordDesignModule } from "./components/users/reset-password/res
import { ConfirmPasswordDesignModule } from "./components/users/confirm-password/confirmPassword.design.module";
import { HelpModule } from "./components/help";
import { ChangePasswordDesignModule } from "./components/users/change-password/changePassword.design.module";
import { ApplicationListDesignModule } from "./components/applications/application-list/applicationList.design.module";
import { ApplicationDetailsDesignModule } from "./components/applications/application-details/applicationDetails.design.module";
import { TenantService } from "./services/tenantService";
import { ValidationSummaryDesignModule } from "./components/users/validation-summary/validationSummary.design.module";
import { BackendService } from "./services/backendService";
Expand Down Expand Up @@ -79,6 +81,8 @@ export class ApimDesignModule implements IInjectorModule {
injector.bindModule(new ResetPasswordDesignModule());
injector.bindModule(new ConfirmPasswordDesignModule());
injector.bindModule(new ChangePasswordDesignModule());
injector.bindModule(new ApplicationListDesignModule())
injector.bindModule(new ApplicationDetailsDesignModule());
injector.bindModule(new ValidationSummaryDesignModule());
injector.bindModule(new RoleBasedSecurityDesignModule());
injector.bindSingleton("app", App);
Expand Down
4 changes: 4 additions & 0 deletions src/apim.publish.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ import { IdentityService } from "./services/identityService";
import { ConfirmPasswordPublishModule } from "./components/users/confirm-password/confirmPassword.publish.module";
import { ChangePasswordPublishModule } from "./components/users/change-password/changePassword.publish.module";
import { ReportsPublishModule } from "./components/reports/reports.publish.module";
import { ApplicationListPublishModule } from "./components/applications/application-list/applicationList.publish.module";
import { ApplicationDetailsPublishModule } from "./components/applications/application-details/applicationDetails.publish.module";
import { ResetPasswordPublishModule } from "./components/users/reset-password/resetPassword.publish.module";
import { ValidationSummaryPublishModule } from "./components/users/validation-summary/validationSummary.publish.module";
import { BackendService } from "./services/backendService";
Expand Down Expand Up @@ -71,6 +73,8 @@ export class ApimPublishModule implements IInjectorModule {
injector.bindModule(new ConfirmPasswordPublishModule());
injector.bindModule(new ChangePasswordPublishModule());
injector.bindModule(new ReportsPublishModule());
injector.bindModule(new ApplicationListPublishModule());
injector.bindModule(new ApplicationDetailsPublishModule());
injector.bindModule(new ValidationSummaryPublishModule());
injector.bindModule(new CustomHtmlPublishModule());
injector.bindModule(new CustomWidgetPublishModule());
Expand Down
6 changes: 6 additions & 0 deletions src/apim.runtime.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ import { RuntimeStaticDataProvider } from "./services/runtimeStaticDataProvider"
import { RequestRetryStrategy } from "./clients/retryStrategy/requestRetryStrategy";
import { TraceClick } from "./bindingHandlers/traceClick";
import { GraphqlService } from "./services/graphqlService";
import { ApplicationService } from "./services/applicationService";
import { ListOfApisRuntimeModule } from "./components/apis/list-of-apis/listOfApis.runtime.module";
import { ApiProductsRuntimeModule } from "./components/apis/api-products/apiProducts.runtime.module";
import { ProductListRuntimeModule } from "./components/products/product-list/productList.runtime.module";
Expand All @@ -112,6 +113,8 @@ import { ChangePasswordRuntimeModule } from "./components/users/change-password/
import { ConfirmPasswordRuntimeModule } from "./components/users/confirm-password/confirmPassword.runtime.module";
import { SubscriptionsRuntimeModule } from "./components/users/subscriptions/subscriptions.runtime.module";
import { ReportsRuntimeModule } from "./components/reports/reports.runtime.module";
import { ApplicationListRuntimeModule } from "./components/applications/application-list/applicationList.runtime.module";
import { ApplicationDetailsRuntimeModule } from "./components/applications/application-details/applicationDetails.runtime.module";
import { ValidationSummaryRuntimeModule } from "./components/users/validation-summary/validationSummary.runtime.module";
import { ClientLogger } from "./logging/clientLogger";

Expand Down Expand Up @@ -145,6 +148,7 @@ export class ApimRuntimeModule implements IInjectorModule {
injector.bind("fileInput", FileInput);
injector.bind("apiService", ApiService);
injector.bind("graphqlService", GraphqlService);
injector.bind("applicationService", ApplicationService);
injector.bind("tagService", TagService);
injector.bind("productService", ProductService);
injector.bind("analyticsService", AnalyticsService);
Expand Down Expand Up @@ -214,6 +218,8 @@ export class ApimRuntimeModule implements IInjectorModule {
injector.bindModule(new ConfirmPasswordRuntimeModule());
injector.bindModule(new SubscriptionsRuntimeModule());
injector.bindModule(new ReportsRuntimeModule());
injector.bindModule(new ApplicationListRuntimeModule());
injector.bindModule(new ApplicationDetailsRuntimeModule());
injector.bindModule(new ValidationSummaryRuntimeModule());

if (process.env.NODE_ENV === staticDataEnvironment) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import { IInjectorModule, IInjector } from "@paperbits/common/injection";
import { IWidgetService } from "@paperbits/common/widgets";
import { KnockoutComponentBinder } from "@paperbits/core/ko";
import { ReactComponentBinder } from "@paperbits/react/bindings";
import { ComponentFlow } from "@paperbits/common/components";
import { Logger } from "@paperbits/common/logging";
import { ISettingsProvider } from "@paperbits/common/configuration";
import { ApplicationDetailsHandlers } from "./applicationDetailsHandlers";
import { ApplicationDetailsModel } from "./applicationDetailsModel";
import { ApplicationDetailsModelBinder } from "./applicationDetailsModelBinder";
import { ApplicationDetailsViewModel } from "./react/ApplicationDetailsViewModel";
import { ApplicationDetailsViewModelBinder } from "./applicationDetailsViewModelBinder";
import { ApplicationDetailsEditor } from "./ko/applicationDetailsEditor";
import { Utils } from "../../../utils";
import { FEATURE_CLIENT_APPLICATIONS } from "../../../constants";

export class ApplicationDetailsDesignModule implements IInjectorModule {
public register(injector: IInjector): void {
injector.bind("applicationDetailsEditor", ApplicationDetailsEditor);
injector.bindSingleton("applicationDetailsModelBinder", ApplicationDetailsModelBinder);
injector.bindSingleton("applicationDetailsViewModelBinder", ApplicationDetailsViewModelBinder)
injector.bindSingleton("applicationDetailsHandlers", ApplicationDetailsHandlers);

const widgetService = injector.resolve<IWidgetService>("widgetService");
const logger = injector.resolve<Logger>("logger");
const settingsProvider = injector.resolve<ISettingsProvider>("settingsProvider");

Utils.getFeatureValueOrNull(FEATURE_CLIENT_APPLICATIONS, settingsProvider, logger)
.then((isEnabled) => {
if (isEnabled) {
widgetService.registerWidget("application-details", {
modelDefinition: ApplicationDetailsModel,
componentBinder: ReactComponentBinder,
componentDefinition: ApplicationDetailsViewModel,
modelBinder: ApplicationDetailsModelBinder,
viewModelBinder: ApplicationDetailsViewModelBinder,
componentFlow: ComponentFlow.Block
});

widgetService.registerWidgetEditor("application-details", {
displayName: "Application: Details",
category: "Applications",
iconClass: "widget-icon widget-icon-api-management",
componentBinder: KnockoutComponentBinder,
componentDefinition: ApplicationDetailsEditor,
handlerComponent: ApplicationDetailsHandlers
});
}
})
.catch((error) => {
logger.trackError(error, { message: "Failed to get feature value for client applications in ApplicationDetailsDesignModule." });
}
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { IInjectorModule, IInjector } from "@paperbits/common/injection";
import { IWidgetService } from "@paperbits/common/widgets";
import { ReactComponentBinder } from "@paperbits/react/bindings";
import { ComponentFlow } from "@paperbits/common/components";
import { Logger } from "@paperbits/common/logging";
import { ISettingsProvider } from "@paperbits/common/configuration";
import { ApplicationDetailsModelBinder } from "./applicationDetailsModelBinder";
import { ApplicationDetailsViewModelBinder } from "./applicationDetailsViewModelBinder";
import { ApplicationDetailsModel } from "./applicationDetailsModel";
import { ApplicationDetailsViewModel } from "./react/ApplicationDetailsViewModel";
import { Utils } from "../../../utils";
import { FEATURE_CLIENT_APPLICATIONS } from "../../../constants";


export class ApplicationDetailsPublishModule implements IInjectorModule {
public register(injector: IInjector): void {
injector.bindToCollection("modelBinders", ApplicationDetailsModelBinder);
injector.bindToCollection("viewModelBinders", ApplicationDetailsViewModelBinder);

const widgetService = injector.resolve<IWidgetService>("widgetService");
const logger = injector.resolve<Logger>("logger");
const settingsProvider = injector.resolve<ISettingsProvider>("settingsProvider");

Utils.getFeatureValueOrNull(FEATURE_CLIENT_APPLICATIONS, settingsProvider, logger)
.then((isEnabled) => {
if (isEnabled) {
widgetService.registerWidget("application-details", {
modelDefinition: ApplicationDetailsModel,
componentBinder: ReactComponentBinder,
componentDefinition: ApplicationDetailsViewModel,
modelBinder: ApplicationDetailsModelBinder,
viewModelBinder: ApplicationDetailsViewModelBinder,
componentFlow: ComponentFlow.Block
});
}
})
.catch((error) => {
logger.trackError(error, { message: "Failed to get feature value for client applications in ApplicationDetailsPublishModule." });
}
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { IInjector, IInjectorModule } from "@paperbits/common/injection";
import { registerCustomElement } from "@paperbits/react/customElements";
import { ApplicationsDetailsRuntime } from "./react/runtime/ApplicationsDetailsRuntime";

export class ApplicationDetailsRuntimeModule implements IInjectorModule {
public register(injector: IInjector): void {
injector.bind("applicationsDetailsRuntime", ApplicationsDetailsRuntime);
registerCustomElement(ApplicationsDetailsRuntime, "fui-application-details", injector);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { Contract } from "@paperbits/common";
import { HyperlinkContract } from "@paperbits/common/editing";
import { LocalStyles } from "@paperbits/common/styles";

/**
* Application details widget configuration.
*/
export interface ApplicationDetailsContract extends Contract {
/**
* Link to a page that contains product details.
*/
detailsPageHyperlink?: HyperlinkContract;

/**
* Widget local styles.
*/
styles?: LocalStyles;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { IWidgetHandler } from "@paperbits/common/editing";
import { ApplicationDetailsModel } from "./applicationDetailsModel";

export class ApplicationDetailsHandlers implements IWidgetHandler<ApplicationDetailsModel> {
public async getWidgetModel(): Promise<ApplicationDetailsModel> {
return new ApplicationDetailsModel();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { HyperlinkModel } from "@paperbits/common/permalinks";
import { LocalStyles } from "@paperbits/common/styles";

export class ApplicationDetailsModel {
/**
* Link to a page that contains product details.
*/
public detailsPageHyperlink: HyperlinkModel;

/**
* Widget local styles.
*/
public styles: LocalStyles = {};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import { Contract } from "@paperbits/common";
import { IModelBinder } from "@paperbits/common/editing";
import { IPermalinkResolver } from "@paperbits/common/permalinks";
import { ApplicationDetailsModel } from "./applicationDetailsModel";
import { ApplicationDetailsContract } from "./applicationDetailsContract";

export class ApplicationDetailsModelBinder implements IModelBinder<ApplicationDetailsModel> {
constructor(private readonly permalinkResolver: IPermalinkResolver) { }

public async contractToModel(contract: ApplicationDetailsContract): Promise<ApplicationDetailsModel> {
const model = new ApplicationDetailsModel();
model.styles = contract.styles ?? {};

if (contract.detailsPageHyperlink) {
model.detailsPageHyperlink = await this.permalinkResolver.getHyperlinkFromContract(contract.detailsPageHyperlink);
}

return model;
}

public modelToContract(model: ApplicationDetailsModel): Contract {
const contract: ApplicationDetailsContract = {
type: "application-details",
detailsPageHyperlink: model.detailsPageHyperlink
? {
target: model.detailsPageHyperlink.target,
targetKey: model.detailsPageHyperlink.targetKey
}
: null,
styles: model.styles
};

return contract;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import { ViewModelBinder, WidgetState } from "@paperbits/common/widgets";
import { StyleCompiler } from "@paperbits/common/styles";
import { ISiteService } from "@paperbits/common/sites";
import { Logger } from "@paperbits/common/logging";
import { ApplicationDetailsModel } from "./applicationDetailsModel";
import { ApplicationDetailsViewModel } from "./react/ApplicationDetailsViewModel";
import { isRedesignEnabledSetting } from "../../../constants";

export class ApplicationDetailsViewModelBinder implements ViewModelBinder<ApplicationDetailsModel, ApplicationDetailsViewModel> {
constructor(
private readonly styleCompiler: StyleCompiler,
private readonly siteService: ISiteService,
private readonly logger: Logger
) { }

public stateToInstance(state: WidgetState, componentInstance: ApplicationDetailsViewModel): void {
componentInstance.setState(prevState => ({
isRedesignEnabled: state.isRedesignEnabled,
styles: state.styles,
detailsPageUrl: state.detailsPageHyperlink
? state.detailsPageHyperlink.href
: undefined
}));
}

public async modelToState(model: ApplicationDetailsModel, state: WidgetState): Promise<void> {
state.detailsPageHyperlink = model.detailsPageHyperlink;

if (model.styles) {
state.styles = await this.styleCompiler.getStyleModelAsync(model.styles);
}

let isRedesignEnabled = false;

try {
isRedesignEnabled = !!(await this.siteService.getSetting(isRedesignEnabledSetting));
} catch (error) {
this.logger?.trackError(error, { message: `Failed to get setting: ${isRedesignEnabledSetting} - ApplicationDetailsViewModelBinder` });
} finally {
state.isRedesignEnabled = isRedesignEnabled;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<fieldset class="form flex-item flex-item-grow" data-bind="scrollable: {}">
<div class="form-group">
<label for="hyperlink" class="form-label">
Link to product details page
<button class="btn btn-info" type="button" title="Help"
data-bind="tooltip: 'A link to be navigated on click.'"></button>
</label>
<div class="input-group">
<input id="hyperlink" type="text" class="form-control" disabled data-bind="value: hyperlinkTitle" />
<button class="btn input-group-addon" title="Select hyperlink" aria-label="Select hyperlink"
data-bind="balloon: { position: 'right', component: { name: 'hyperlink-selector', params: { hyperlink: $component.hyperlink, onChange: $component.onHyperlinkChange } } }">
<i class="paperbits-icon paperbits-link-69-2"></i>
</button>
</div>
</div>
</fieldset>
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import * as ko from "knockout";
import { Component, OnMounted, Param, Event } from "@paperbits/common/ko/decorators";
import { HyperlinkModel } from "@paperbits/common/permalinks";
import { ApplicationDetailsModel } from "../applicationDetailsModel";
import template from "./applicationDetailsEditor.html";

@Component({
selector: "application-details-editor",
template: template
})
export class ApplicationDetailsEditor {
public readonly hyperlink: ko.Observable<HyperlinkModel>;
public readonly hyperlinkTitle: ko.Computed<string>;

constructor() {
this.hyperlink = ko.observable();
this.hyperlinkTitle = ko.computed<string>(() => this.hyperlink() ? this.hyperlink().title : "Add a link...");
}

@Param()
public model: ApplicationDetailsModel;

@Event()
public onChange: (model: ApplicationDetailsModel) => void;

@OnMounted()
public async initialize(): Promise<void> {
this.hyperlink(this.model.detailsPageHyperlink);
}

private applyChanges(): void {
this.model.detailsPageHyperlink = this.hyperlink();
this.onChange(this.model);
}

public onHyperlinkChange(hyperlink: HyperlinkModel): void {
this.hyperlink(hyperlink);
this.applyChanges();
}
}
Loading
Loading