PageSourceSearch

https://www.abpjs.io/assets/js/d11d04a4.2931e56c.js

js abpjs.io collected 2026-10-05 06:35:39 UTC 10,373 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunk_abpjs_abp_react_docs=globalThis.webpackChunk_abpjs_abp_react_docs||[]).push([[13222],{17130(e,n,s){s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>d,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"packages/tenant-management/release-notes","title":"Release Notes","description":"v2.0.0","source":"@site/versioned_docs/version-2.0.0/packages/tenant-management/release-notes.md","sourceDirName":"packages/tenant-management","slug":"/packages/tenant-management/release-notes","permalink":"/docs/2.0.0/packages/tenant-management/release-notes","draft":false,"unlisted":false,"tags":[],"version":"2.0.0","sidebarPosition":99,"frontMatter":{"sidebar_position":99},"sidebar":"tutorialSidebar","previous":{"title":"Tenants","permalink":"/docs/2.0.0/packages/tenant-management/tenants"},"next":{"title":"Overview","permalink":"/docs/2.0.0/packages/feature-management/overview"}}');var r=s(74848),i=s(28453);const d={sidebar_position:99},a="Release Notes",l={},c=[{value:"v2.0.0",id:"v200",level:2},{value:"Breaking Changes",id:"breaking-changes",level:3},{value:"New Features",id:"new-features",level:3},{value:"Type Improvements",id:"type-improvements",level:3},{value:"v1.1.0",id:"v110",level:2},{value:"New Features",id:"new-features-1",level:3},{value:"Hook Enhancements",id:"hook-enhancements",level:3},{value:"v1.0.0",id:"v100",level:2},{value:"New Features",id:"new-features-2",level:3},{value:"v0.9.0",id:"v090",level:2},{value:"New Features",id:"new-features-3",level:3},{value:"v0.8.0",id:"v080",level:2},{value:"v0.7.6",id:"v076",level:2}];function o(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"release-notes",children:"Release Notes"})}),"\n",(0,r.jsx)(n.h2,{id:"v200",children:"v2.0.0"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"January 2026"})}),"\n",(0,r.jsx)(n.h3,{id:"breaking-changes",children:"Breaking Changes"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsxs)(n.strong,{children:[(0,r.jsx)(n.code,{children:"TENANT_MANAGEMENT_ROUTES"})," removed"]})," - This constant has been removed. Use ",(0,r.jsx)(n.code,{children:"TENANT_MANAGEMENT_ROUTE_PATHS"})," and ",(0,r.jsx)(n.code,{children:"TENANT_MANAGEMENT_POLICIES"})," instead for route configuration."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"new-features",children:"New Features"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsxs)(n.strong,{children:[(0,r.jsx)(n.code,{children:"TenantManagementStateService"})," dispatch methods"]})," - Added programmatic dispatch methods:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"dispatchGetTenants(params?)"})," - Fetch tenants from API and update state"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"dispatchGetTenantById(id)"})," - Fetch a single tenant by ID"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"dispatchCreateTenant(body)"})," - Create a new tenant"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"dispatchUpdateTenant(body)"})," - Update an existing tenant"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"dispatchDeleteTenant(id)"})," - Delete a tenant"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsxs)(n.strong,{children:[(0,r.jsx)(n.code,{children:"onVisibleFeaturesChange"})," prop"]})," - New callback prop on ",(0,r.jsx)(n.code,{children:"TenantManagementModal"})," to handle features modal visibility changes"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Component Interface Types"})," - Added TypeScript interfaces for component inputs/outputs:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"TenantManagement.TenantsComponentInputs"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"TenantManagement.TenantsComponentOutputs"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"type-improvements",children:"Type Improvements"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsxs)(n.strong,{children:[(0,r.jsx)(n.code,{children:"onSearch"})," callback"]}
1)," - Updated signature from ",(0,r.jsx)(n.code,{children:"(value: any) => void"})," to ",(0,r.jsx)(n.code,{children:"(value: string) => void"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsxs)(n.strong,{children:[(0,r.jsx)(n.code,{children:"onPageChange"})," callback"]})," - Updated signature from ",(0,r.jsx)(n.code,{children:"(data: any) => void"})," to ",(0,r.jsx)(n.code,{children:"(page: number) => void"})]}),"\n"]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"v110",children:"v1.1.0"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"January 2026"})}),"\n",(0,r.jsx)(n.h3,{id:"new-features-1",children:"New Features"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"TenantManagementStateService"})})," - New state service for managing tenant state:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"get()"})," - Get all tenants"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"getTenantsTotalCount()"})," - Get total tenant count"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"subscribe()"})," - Subscribe to state changes"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"reset()"})," - Reset state to initial values"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"getTenantManagementStateService()"})})," - Get singleton instance of the state service"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsxs)(n.strong,{children:[(0,r.jsx)(n.code,{children:"ModalContentType"})," type"]})," - Exported type for modal content (",(0,r.jsx)(n.code,{children:"'saveConnStr'"})," | ",(0,r.jsx)(n.code,{children:"'saveTenant'"}),")"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"hook-enhancements",children:"Hook Enhancements"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"isDisabledSaveButton"})})," - Computed property that returns ",(0,r.jsx)(n.code,{children:"true"})," when save should be disabled (connection string required but empty)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"onSharedDatabaseChange()"})})," - Handler for shared database checkbox that auto-clears connection string"]}),"\n"]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"v100",children:"v1.0.0"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"January 2026"})}),"\n",(0,r.jsx)(n.h3,{id:"new-features-2",children:"New Features"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsxs)(n.strong,{children:["Sorting support in ",(0,r.jsx)(n.code,{children:"useTenantManagement"})]})," - New sorting state and methods:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"sortKey"})," - Current sort field (default: ",(0,r.jsx)(n.code,{children:"'name'"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"sortOrder"})," - Sort direction (",(0,r.jsx)(n.code,{children:"'asc'"})," | ",(0,r.jsx)(n.code,{children:"'desc'"})," | ",(0,r.jsx)(n.code,{children:"''"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"setSortKey()"})," - Update sort field"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"setSortOrder()"})," - Update sort direction"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsxs)(n.strong,{children:[(0,r.jsx)(n.code,{children:"SortOrder"}
1)," type"]})," - Exported type for sort order values"]}),"\n"]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"v090",children:"v0.9.0"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"January 2026"})}),"\n",(0,r.jsx)(n.h3,{id:"new-features-3",children:"New Features"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"TENANT_MANAGEMENT_ROUTES"})})," - Route constant (format: ",(0,r.jsx)(n.code,{children:"{ routes: ABP.FullRoute[] }"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"TENANT_MANAGEMENT_ROUTE_PATHS"})})," - Path constants (BASE, TENANTS)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"TENANT_MANAGEMENT_POLICIES"})})," - Policy name constants"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsxs)(n.strong,{children:[(0,r.jsx)(n.code,{children:"fetchTenants"})," pagination"]})," - Now accepts optional ",(0,r.jsx)(n.code,{children:"ABP.PageQueryParams"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsxs)(n.strong,{children:[(0,r.jsx)(n.code,{children:"totalCount"})," in hook"]})," - Returns total count for pagination"]}),"\n"]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"v080",children:"v0.8.0"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"January 2026"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Version alignment with @abpjs/core"}),"\n"]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"v076",children:"v0.7.6"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"January 2026"})," - Initial Release"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"TenantManagementModal component"}),"\n",(0,r.jsx)(n.li,{children:"useTenantManagement hook with CRUD operations"}),"\n",(0,r.jsx)(n.li,{children:"Connection string management"}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},28453(e,n,s){s.d(n,{R:()=>d,x:()=>a});var t=s(96540);const r={},i=t.createContext(r);function d(e){const n=t.useContext(i);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.