Skip to content

Commit

Permalink
Merge branch 'develop' into add-client-cert-paths
Browse files Browse the repository at this point in the history
  • Loading branch information
gatzjames committed Sep 10, 2021
2 parents a35cf12 + 02c65a8 commit 8a2390e
Show file tree
Hide file tree
Showing 11 changed files with 114 additions and 11 deletions.
35 changes: 35 additions & 0 deletions packages/insomnia-app/app/models/helpers/__tests__/project.test.ts
@@ -0,0 +1,35 @@
import { DEFAULT_PROJECT_ID } from '../../project';
import { sortProjects } from '../project';

const defaultProject = { name: 'a', remoteId: null, _id: DEFAULT_PROJECT_ID };

const localA = { name: 'a', remoteId: null, _id: 'localA' };
const localB = { name: 'b', remoteId: null, _id: 'localB' };

const remoteA = { name: 'a', remoteId: 'notNull', _id: 'remoteA' };
const remoteB = { name: 'b', remoteId: 'notNull', _id: 'remoteB' };
const remote0 = { name: '0', remoteId: 'notNull', _id: 'remote0' };

describe('sortProjects', () => {
it('sorts projects by default > local > remote > name', () => {
const unSortedProjects = [
remoteA,
localB,
defaultProject,
remoteB,
localA,
remote0,
];
const result = sortProjects(unSortedProjects);

const sortedProjects = [
defaultProject,
localA,
localB,
remote0,
remoteA,
remoteB,
];
expect(result).toEqual(sortedProjects);
});
});
10 changes: 10 additions & 0 deletions packages/insomnia-app/app/models/helpers/project.ts
@@ -0,0 +1,10 @@
import { ascend, descend, prop, sortWith } from 'ramda';

import { isDefaultProject, isLocalProject, isRemoteProject, Project } from '../project';

export const sortProjects = <T extends Pick<Project, 'name' | 'remoteId' | '_id'>>(projects: T[]) => sortWith<T>([
descend(isDefaultProject),
descend(isLocalProject),
descend(isRemoteProject),
ascend(prop('name')),
], projects);
10 changes: 5 additions & 5 deletions packages/insomnia-app/app/models/project.ts
Expand Up @@ -11,11 +11,11 @@ export const canSync = false;

export const DEFAULT_PROJECT_ID = `${prefix}_default-project`;

export const isDefaultProject = (project: Project) => project._id === DEFAULT_PROJECT_ID;
export const isNotDefaultProject = (project: Project) => !isDefaultProject(project);
export const isLocalProject = (project: Project): project is LocalProject => project.remoteId === null;
export const isRemoteProject = (project: Project): project is RemoteProject => !isLocalProject(project);
export const projectHasSettings = (project: Project) => !isDefaultProject(project);
export const isDefaultProject = (project: Pick<Project, '_id'>) => project._id === DEFAULT_PROJECT_ID;
export const isNotDefaultProject = (project: Pick<Project, '_id'>) => !isDefaultProject(project);
export const isLocalProject = (project: Pick<Project, 'remoteId'>): project is LocalProject => project.remoteId === null;
export const isRemoteProject = (project: Pick<Project, 'remoteId'>): project is RemoteProject => !isLocalProject(project);
export const projectHasSettings = (project: Pick<Project, '_id'>) => !isDefaultProject(project);

interface CommonProject {
name: string;
Expand Down
@@ -1,10 +1,11 @@
import { Dropdown, DropdownDivider, DropdownItem, SvgIcon, SvgIconProps, Tooltip } from 'insomnia-components';
import { partition } from 'ramda';
import React, { FC, useCallback, useMemo } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import styled from 'styled-components';

import { strings } from '../../../common/strings';
import { isDefaultProject, isNotDefaultProject, isRemoteProject, Project, projectHasSettings } from '../../../models/project';
import { isDefaultProject, isRemoteProject, Project, projectHasSettings } from '../../../models/project';
import { VCS } from '../../../sync/vcs/vcs';
import { useRemoteProjects } from '../../hooks/project';
import { setActiveProject } from '../../redux/modules/global';
Expand Down Expand Up @@ -53,13 +54,13 @@ const ProjectDropdownItem: FC<{
setActive: (projectId: string) => void;
}> = ({ isActive, project, setActive }) => {
const { _id, name } = project;
const isBase = isDefaultProject(project);
const isDefault = isDefaultProject(project);
const isRemote = isRemoteProject(project);

return (
<DropdownItem
key={_id}
icon={isBase ? home : isRemote ? remoteProject : localProject}
icon={isDefault ? home : isRemote ? remoteProject : localProject}
right={isActive && <Checkmark icon="checkmark" />}
value={_id}
onClick={setActive}
Expand Down Expand Up @@ -98,11 +99,13 @@ export const ProjectDropdown: FC<Props> = ({ vcs }) => {
/>
), [setActive, activeProject._id]);

const [defaultProjects, userProjects] = partition(isDefaultProject, projects);

return (
<Dropdown renderButton={button} onOpen={refresh}>
{projects.filter(isDefaultProject).map(renderProject)}
{defaultProjects.map(renderProject)}
<DropdownDivider>All {strings.project.plural.toLowerCase()}{' '}{loading && spinner}</DropdownDivider>
{projects.filter(isNotDefaultProject).map(renderProject)}
{userProjects.map(renderProject)}
{projectHasSettings(activeProject) && <>
<DropdownDivider />
<DropdownItem icon={<StyledSvgIcon icon="gear" />} onClick={showSettings}>
Expand Down
3 changes: 2 additions & 1 deletion packages/insomnia-app/app/ui/redux/selectors.ts
Expand Up @@ -5,6 +5,7 @@ import { isWorkspaceActivity } from '../../common/constants';
import * as models from '../../models';
import { BaseModel } from '../../models';
import { getStatusCandidates } from '../../models/helpers/get-status-candidates';
import { sortProjects } from '../../models/helpers/project';
import { DEFAULT_PROJECT_ID, isRemoteProject } from '../../models/project';
import { isRequest, Request } from '../../models/request';
import { isRequestGroup, RequestGroup } from '../../models/request-group';
Expand Down Expand Up @@ -73,7 +74,7 @@ export const selectRequestMetas = createSelector(

export const selectProjects = createSelector(
selectEntitiesLists,
entities => entities.projects,
entities => sortProjects(entities.projects),
);

export const selectRemoteProjects = createSelector(
Expand Down
25 changes: 25 additions & 0 deletions packages/insomnia-app/package-lock.json

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

3 changes: 3 additions & 0 deletions packages/insomnia-app/package.json
Expand Up @@ -142,6 +142,8 @@
"openapi-2-kong": "2.3.2",
"papaparse": "^5.2.0",
"pdfjs-dist": "^2.5.207",
"ramda": "^0.27.1",
"ramda-adjunct": "^2.33.0",
"react": "^16.8.3",
"react-animated-tree": "^1.0.10",
"react-dnd": "^7.4.5",
Expand Down Expand Up @@ -202,6 +204,7 @@
"@types/nunjucks": "^3.1.4",
"@types/papaparse": "^5.2.5",
"@types/prop-types": "^15.7.3",
"@types/ramda": "^0.27.44",
"@types/react": "^16.14.5",
"@types/react-dom": "^16.9.12",
"@types/react-redux": "^7.1.16",
Expand Down
13 changes: 13 additions & 0 deletions packages/insomnia-inso/package-lock.json

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

1 change: 1 addition & 0 deletions packages/insomnia-inso/package.json
Expand Up @@ -59,6 +59,7 @@
},
"dependencies": {
"@stoplight/spectral": "^5.9.0",
"@types/ramda": "^0.27.44",
"commander": "^5.1.0",
"consola": "^2.15.0",
"cosmiconfig": "^6.0.0",
Expand Down
10 changes: 10 additions & 0 deletions packages/insomnia-send-request/package-lock.json

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

2 changes: 2 additions & 0 deletions packages/insomnia-send-request/package.json
Expand Up @@ -35,6 +35,8 @@
"nunjucks": "^3.2.1",
"oauth-1.0a": "^2.2.6",
"openapi-2-kong": "2.3.2",
"ramda": "^0.27.1",
"ramda-adjunct": "^2.33.0",
"tough-cookie": "^4.0.0",
"url-join": "^4.0.1",
"uuid": "^8.2.0",
Expand Down

0 comments on commit 8a2390e

Please sign in to comment.