Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
rmathis committed Oct 21, 2022
1 parent e0f1808 commit 93d32e1
Show file tree
Hide file tree
Showing 7 changed files with 217 additions and 2 deletions.
18 changes: 18 additions & 0 deletions ui/public/assets/data/registrations.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
[
{
"name": "Foobar",
"redirect_uris": [],
"response_types": [],
"grant_types": "",
"application_type": "",
"contacts": "",
"subject_type": "",
"jwks": "",
"jwks_uri": "",
"token_endpoint_auth_method": "",
"logo_uri": "",
"policy_uri": "",
"tos_uri": "",
"scope": ""
}
]
8 changes: 7 additions & 1 deletion ui/src/app/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ import { Groups } from './admin/Groups';
import { BASE_PATH } from './App.constant';
import { ProtectRoute } from './core/components/ProtectRoute';
import { IdpConfiguration } from './admin/IdpConfiguration';

import { DynamicRegistration } from './dynamic-registration/DynamicRegistration';
import { DynamicRegistrationsApi } from './dynamic-registration/hoc/DynamicRegistrationContext';

function App() {

Expand Down Expand Up @@ -83,6 +84,11 @@ function App() {
</Route>
<Route path="/dashboard" component={Dashboard} />
<Route path="/metadata/source/new" component={NewSource} />
<Route path="/dynamic-registration" render={() =>
<DynamicRegistrationsApi>
<DynamicRegistration />
</DynamicRegistrationsApi>
} />
<Route path="/metadata/provider/new" render={() =>
<ProtectRoute redirectTo="/dashboard">
<NewProvider />
Expand Down
16 changes: 15 additions & 1 deletion ui/src/app/dashboard/view/Dashboard.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ import { useCurrentUserLoading, useIsAdmin } from '../../core/user/UserContext';
import useFetch from 'use-http';
import API_BASE_PATH from '../../App.constant';
import { useNonAdminSources } from '../../metadata/hooks/api';
import { DynamicRegistrationsApi } from '../../dynamic-registration/hoc/DynamicRegistrationContext';
import { DynamicRegistrationsTab } from './DynamicRegistrationsTab';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faSpinner } from '@fortawesome/free-solid-svg-icons';
import Badge from 'react-bootstrap/Badge';
Expand Down Expand Up @@ -76,12 +78,19 @@ export function Dashboard () {
</NavLink>
</Nav.Item>
{isAdmin &&
<>
<Nav.Item>
<NavLink className="nav-link" to={`${path}/metadata/manager/providers`}>
<Translate value="label.metadata-providers">Metadata Providers</Translate>
</NavLink>
</Nav.Item>
}
<Nav.Item>
<NavLink className="nav-link" to={`${path}/dynamic-registrations`}>
<Translate value="label.dynamic-registration">Dynamic Registration</Translate>
</NavLink>
</Nav.Item>
{isAdmin &&
<>
<Nav.Item>
<NavLink className="nav-link" to={`${path}/admin/management`}>
<Translate value="label.admin">Admin</Translate>
Expand All @@ -102,6 +111,11 @@ export function Dashboard () {
</Route>
<Route path={`${path}/metadata/manager/resolvers`} component={SourcesTab} />
<Route path={`${path}/metadata/manager/providers`} component={ProvidersTab} />
<Route path={`${path}/dynamic-registrations`} render={() =>
<DynamicRegistrationsApi>
<DynamicRegistrationsTab />
</DynamicRegistrationsApi>
} />
<Route path={`${path}/admin/management`} render={() =>
<ProtectRoute redirectTo="/dashboard">
<AdminTab />
Expand Down
43 changes: 43 additions & 0 deletions ui/src/app/dashboard/view/DynamicRegistrationsTab.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import React from 'react';
// import { useDynamicRegistrationDispatcher } from '../../dynamic-registration/hoc/DynamicRegistrationContext';
import Translate from '../../i18n/components/translate';
import { Ordered } from '../component/Ordered';
import { Search } from '../component/Search';

import {DynamicRegistrationList} from '../../dynamic-registration/component/DynamicRegistrationList';

const searchProps = ['name'];

export function DynamicRegistrationsTab () {

// const dispatcher = useDynamicRegistrationDispatcher();

/*eslint-disable react-hooks/exhaustive-deps*/
// React.useEffect(() => { loadRegistrations() }, []);
const registrations = [];

return (
<section className="section">
<div className="section-body border border-top-0 border-primary">
<>
<div className="section-header bg-primary p-2 text-light">
<span className="lead">
<Translate value="label.current-dynamic-registrations">Dynamic Registrations</Translate>
</span>
</div>
<div className="p-3">
<Ordered entities={registrations} prop="resourceIds">
{(ordered, first, last, onOrderUp, onOrderDown) =>
<Search entities={ordered} searchable={searchProps}>
{(searched) =>
<DynamicRegistrationList entities={searched} />
}
</Search>
}
</Ordered>
</div>
</>
</div>
</section>
)
}
38 changes: 38 additions & 0 deletions ui/src/app/dynamic-registration/DynamicRegistration.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import React from 'react';
import { useDynamicRegistrationDispatcher } from './hoc/DynamicRegistrationContext';
import Translate from '../i18n/components/translate';
import { Search } from '../dashboard/component/Search';

import {DynamicRegistrationList} from './component/DynamicRegistrationList';

const searchProps = ['name'];

export function DynamicRegistration () {

// const dispatcher = useDynamicRegistrationDispatcher();

/*eslint-disable react-hooks/exhaustive-deps*/
// React.useEffect(() => { loadRegistrations() }, []);
const registrations = [];

return (
<section className="section">
<div className="section-body border border-top-0 border-primary">
<>
<div className="section-header bg-primary p-2 text-light">
<span className="lead">
<Translate value="label.current-dynamic-registrations">Dynamic Registrations</Translate>
</span>
</div>
<div className="p-3">
<Search entities={registrations} searchable={searchProps}>
{(searched) =>
<DynamicRegistrationList entities={searched} />
}
</Search>
</div>
</>
</div>
</section>
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import React from 'react';

export function DynamicRegistrationList ({entities}) {
return <><pre>{JSON.stringify(entities, null, 4)}</pre></>
}
91 changes: 91 additions & 0 deletions ui/src/app/dynamic-registration/hoc/DynamicRegistrationContext.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import React from 'react';


const initialState = {
registrations: [],
selected: null,
};

const DynamicRegistrationContext = React.createContext();

const { Provider, Consumer } = DynamicRegistrationContext;

export const DynamicRegistrationActions = {
LOAD_REGISTRATIONS: 'load dynamic registrations (list GET)',
SELECT_REGISTRATION: 'load dynamic registration (single GET)',
CREATE_REGISTRATION: 'create dynamic registration (POST)',
UPDATE_REGISTRATION: 'update dynamic registration (PUT)',
DELETE_REGISTRATION: 'delete dynamic registration (DELETE)'
};

export const loadRegistrations = (payload) => {
return {
type: DynamicRegistrationActions.LOAD_REGISTRATIONS,
payload
}
}

export const selectRegistration = (payload) => {
return {
type: DynamicRegistrationActions.SELECT_REGISTRATION,
payload
}
}

export const createRegistration = (payload) => {
return {
type: DynamicRegistrationActions.CREATE_REGISTRATION,
payload
}
}

export const updateRegistration = (payload) => {
return {
type: DynamicRegistrationActions.UPDATE_REGISTRATION,
payload
}
}

export const deleteRegistration = (payload) => {
return {
type: DynamicRegistrationActions.DELETE_REGISTRATION,
payload
}
}

function reducer(state, action) {
switch (action.type) {
default:
return state;
}
}

/*eslint-disable react-hooks/exhaustive-deps*/
function DynamicRegistrationsApi({ children, initial = {} }) {

const [contextValue, setContextValue] = React.useState({...initialState});

return (
<React.Fragment>
<Provider value={contextValue}>{children}</Provider>
</React.Fragment>
);
}


function useDynamicRegistrationContext () {
return React.useContext(DynamicRegistrationContext);
}

function useDynamicRegistrationDispatcher () {
const { dispatch } = useDynamicRegistrationContext();
return dispatch;
}

export {
DynamicRegistrationsApi,
useDynamicRegistrationContext,
useDynamicRegistrationDispatcher,
Provider as MetadataFormProvider,
Consumer as MetadataFormConsumer
};

0 comments on commit 93d32e1

Please sign in to comment.