mirror of
https://github.com/PeWu/topola-viewer.git
synced 2026-08-03 01:21:50 +00:00
Refactoring: moved some source files into subdirectories
This commit is contained in:
@@ -61,7 +61,7 @@
|
|||||||
"start": "REACT_APP_GIT_SHA=`git rev-parse --short HEAD` REACT_APP_GIT_TIME=`git log -1 --format=%ci` react-scripts start",
|
"start": "REACT_APP_GIT_SHA=`git rev-parse --short HEAD` REACT_APP_GIT_TIME=`git log -1 --format=%ci` react-scripts start",
|
||||||
"build": "REACT_APP_GIT_SHA=`git rev-parse --short HEAD` REACT_APP_GIT_TIME=`git log -1 --format=%ci` react-scripts build",
|
"build": "REACT_APP_GIT_SHA=`git rev-parse --short HEAD` REACT_APP_GIT_TIME=`git log -1 --format=%ci` react-scripts build",
|
||||||
"test": "react-scripts test --env=jsdom",
|
"test": "react-scripts test --env=jsdom",
|
||||||
"prettier": "prettier --write src/**/*.{ts,tsx,json}",
|
"prettier": "prettier --write src/**/*.{ts,tsx,json} && prettier --write src/*.{ts,tsx,json}",
|
||||||
"predeploy": "npm run build",
|
"predeploy": "npm run build",
|
||||||
"deploy": "gh-pages -d build",
|
"deploy": "gh-pages -d build",
|
||||||
"predeploy-wikitree": "npm run build",
|
"predeploy-wikitree": "npm run build",
|
||||||
|
|||||||
10
src/app.tsx
10
src/app.tsx
@@ -1,19 +1,19 @@
|
|||||||
import * as H from 'history';
|
import * as H from 'history';
|
||||||
import * as queryString from 'query-string';
|
import * as queryString from 'query-string';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import {analyticsEvent} from './analytics';
|
import {analyticsEvent} from './util/analytics';
|
||||||
import {Chart, ChartType} from './chart';
|
import {Chart, ChartType} from './chart';
|
||||||
import {Details} from './details';
|
import {Details} from './details';
|
||||||
import {FormattedMessage, InjectedIntl} from 'react-intl';
|
import {FormattedMessage, InjectedIntl} from 'react-intl';
|
||||||
import {getSelection, loadFromUrl, loadGedcom} from './load_data';
|
import {getSelection, loadFromUrl, loadGedcom} from './datasource/load_data';
|
||||||
import {getSoftware, TopolaData} from './gedcom_util';
|
import {getSoftware, TopolaData} from './util/gedcom_util';
|
||||||
import {IndiInfo} from 'topola';
|
import {IndiInfo} from 'topola';
|
||||||
import {intlShape} from 'react-intl';
|
import {intlShape} from 'react-intl';
|
||||||
import {Intro} from './intro';
|
import {Intro} from './intro';
|
||||||
import {Loader, Message, Portal, Responsive} from 'semantic-ui-react';
|
import {Loader, Message, Portal, Responsive} from 'semantic-ui-react';
|
||||||
import {loadWikiTree, PRIVATE_ID_PREFIX} from './wikitree';
|
import {loadWikiTree, PRIVATE_ID_PREFIX} from './datasource/wikitree';
|
||||||
import {Redirect, Route, RouteComponentProps, Switch} from 'react-router-dom';
|
import {Redirect, Route, RouteComponentProps, Switch} from 'react-router-dom';
|
||||||
import {TopBar} from './top_bar';
|
import {TopBar} from './menu/top_bar';
|
||||||
|
|
||||||
/** Shows an error message in the middle of the screen. */
|
/** Shows an error message in the middle of the screen. */
|
||||||
function ErrorMessage(props: {message?: string}) {
|
function ErrorMessage(props: {message?: string}) {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import {convertGedcom, TopolaData} from './gedcom_util';
|
import {convertGedcom, TopolaData} from '../util/gedcom_util';
|
||||||
import {IndiInfo, JsonGedcomData} from 'topola';
|
import {IndiInfo, JsonGedcomData} from 'topola';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -46,11 +46,15 @@ export async function loadFromUrl(
|
|||||||
console.warn('Failed to load data from session storage: ' + e);
|
console.warn('Failed to load data from session storage: ' + e);
|
||||||
}
|
}
|
||||||
|
|
||||||
const driveUrlMatch1 = url.match(/https:\/\/drive\.google\.com\/file\/d\/(.*)\/.*/);
|
const driveUrlMatch1 = url.match(
|
||||||
|
/https:\/\/drive\.google\.com\/file\/d\/(.*)\/.*/,
|
||||||
|
);
|
||||||
if (driveUrlMatch1) {
|
if (driveUrlMatch1) {
|
||||||
url = `https://drive.google.com/uc?id=${driveUrlMatch1[1]}&export=download`;
|
url = `https://drive.google.com/uc?id=${driveUrlMatch1[1]}&export=download`;
|
||||||
}
|
}
|
||||||
const driveUrlMatch2 = url.match(/https:\/\/drive\.google\.com\/open\?id=([^&]*)&?.*/);
|
const driveUrlMatch2 = url.match(
|
||||||
|
/https:\/\/drive\.google\.com\/open\?id=([^&]*)&?.*/,
|
||||||
|
);
|
||||||
if (driveUrlMatch2) {
|
if (driveUrlMatch2) {
|
||||||
url = `https://drive.google.com/uc?id=${driveUrlMatch2[1]}&export=download`;
|
url = `https://drive.google.com/uc?id=${driveUrlMatch2[1]}&export=download`;
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import Cookies from 'js-cookie';
|
import Cookies from 'js-cookie';
|
||||||
import {Date, JsonFam, JsonIndi, DateOrRange} from 'topola';
|
import {Date, DateOrRange, JsonFam, JsonIndi} from 'topola';
|
||||||
import {GedcomData, TopolaData, normalizeGedcom} from './gedcom_util';
|
import {GedcomData, normalizeGedcom, TopolaData} from '../util/gedcom_util';
|
||||||
import {GedcomEntry} from 'parse-gedcom';
|
import {GedcomEntry} from 'parse-gedcom';
|
||||||
import {InjectedIntl} from 'react-intl';
|
import {InjectedIntl} from 'react-intl';
|
||||||
|
|
||||||
@@ -2,10 +2,10 @@ import * as React from 'react';
|
|||||||
import flatMap from 'array.prototype.flatmap';
|
import flatMap from 'array.prototype.flatmap';
|
||||||
import Linkify from 'react-linkify';
|
import Linkify from 'react-linkify';
|
||||||
import {FormattedMessage, InjectedIntl} from 'react-intl';
|
import {FormattedMessage, InjectedIntl} from 'react-intl';
|
||||||
import {GedcomData, pointerToId} from './gedcom_util';
|
import {GedcomData, pointerToId} from './util/gedcom_util';
|
||||||
import {GedcomEntry} from 'parse-gedcom';
|
import {GedcomEntry} from 'parse-gedcom';
|
||||||
import {intlShape} from 'react-intl';
|
import {intlShape} from 'react-intl';
|
||||||
import {translateDate} from './date_util';
|
import {translateDate} from './util/date_util';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
gedcom: GedcomData;
|
gedcom: GedcomData;
|
||||||
|
|||||||
@@ -110,9 +110,7 @@ export function Intro() {
|
|||||||
<p className="ui right aligned version">
|
<p className="ui right aligned version">
|
||||||
version: {formatBuildDate(process.env.REACT_APP_GIT_TIME!)} (
|
version: {formatBuildDate(process.env.REACT_APP_GIT_TIME!)} (
|
||||||
<a
|
<a
|
||||||
href={`https://github.com/PeWu/topola-viewer/commit/${
|
href={`https://github.com/PeWu/topola-viewer/commit/${process.env.REACT_APP_GIT_SHA}`}
|
||||||
process.env.REACT_APP_GIT_SHA
|
|
||||||
}`}
|
|
||||||
>
|
>
|
||||||
{process.env.REACT_APP_GIT_SHA}
|
{process.env.REACT_APP_GIT_SHA}
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import naturalSort from 'javascript-natural-sort';
|
|
||||||
import lunr from 'lunr';
|
import lunr from 'lunr';
|
||||||
import {idToIndiMap, idToFamMap} from './gedcom_util';
|
import naturalSort from 'javascript-natural-sort';
|
||||||
import {JsonIndi, JsonFam, JsonGedcomData} from 'topola';
|
import {idToFamMap, idToIndiMap} from '../util/gedcom_util';
|
||||||
|
import {JsonFam, JsonGedcomData, JsonIndi} from 'topola';
|
||||||
|
|
||||||
const MAX_RESULTS = 8;
|
const MAX_RESULTS = 8;
|
||||||
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
|
import {formatDateOrRange} from '../util/date_util';
|
||||||
import {InjectedIntl} from 'react-intl';
|
import {InjectedIntl} from 'react-intl';
|
||||||
import {SearchResult} from './search_index';
|
|
||||||
import {formatDateOrRange} from './date_util';
|
|
||||||
import {JsonIndi} from 'topola';
|
import {JsonIndi} from 'topola';
|
||||||
|
import {SearchResult} from './search_index';
|
||||||
|
|
||||||
function getNameLine(result: SearchResult) {
|
function getNameLine(result: SearchResult) {
|
||||||
const name = [result.indi.firstName, result.indi.lastName].join(' ').trim();
|
const name = [result.indi.firstName, result.indi.lastName].join(' ').trim();
|
||||||
@@ -2,11 +2,12 @@ import * as queryString from 'query-string';
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import debounce from 'debounce';
|
import debounce from 'debounce';
|
||||||
import md5 from 'md5';
|
import md5 from 'md5';
|
||||||
import {analyticsEvent} from './analytics';
|
import wikitreeLogo from './wikitree.png';
|
||||||
|
import {analyticsEvent} from '../util/analytics';
|
||||||
import {buildSearchIndex, SearchIndex} from './search_index';
|
import {buildSearchIndex, SearchIndex} from './search_index';
|
||||||
import {displaySearchResult} from './search_util';
|
import {displaySearchResult} from './search_util';
|
||||||
import {FormattedMessage, intlShape} from 'react-intl';
|
import {FormattedMessage, intlShape} from 'react-intl';
|
||||||
import {getLoggedInUserName} from './wikitree';
|
import {getLoggedInUserName} from '../datasource/wikitree';
|
||||||
import {IndiInfo, JsonGedcomData} from 'topola';
|
import {IndiInfo, JsonGedcomData} from 'topola';
|
||||||
import {Link} from 'react-router-dom';
|
import {Link} from 'react-router-dom';
|
||||||
import {RouteComponentProps} from 'react-router-dom';
|
import {RouteComponentProps} from 'react-router-dom';
|
||||||
@@ -24,7 +25,6 @@ import {
|
|||||||
SearchResultProps,
|
SearchResultProps,
|
||||||
Responsive,
|
Responsive,
|
||||||
} from 'semantic-ui-react';
|
} from 'semantic-ui-react';
|
||||||
import wikitreeLogo from './wikitree.png';
|
|
||||||
|
|
||||||
enum WikiTreeLoginState {
|
enum WikiTreeLoginState {
|
||||||
UNKNOWN,
|
UNKNOWN,
|
||||||
@@ -643,11 +643,7 @@ export class TopBar extends React.Component<
|
|||||||
private fileMenus(screenSize: ScreenSize) {
|
private fileMenus(screenSize: ScreenSize) {
|
||||||
const loadWikiTreeItem = (
|
const loadWikiTreeItem = (
|
||||||
<>
|
<>
|
||||||
<img
|
<img src={wikitreeLogo} alt="WikiTree logo" className="menu-icon" />
|
||||||
src={wikitreeLogo}
|
|
||||||
alt="WikiTree logo"
|
|
||||||
className="menu-icon"
|
|
||||||
/>
|
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id="menu.select_wikitree_id"
|
id="menu.select_wikitree_id"
|
||||||
defaultMessage="Select WikiTree ID"
|
defaultMessage="Select WikiTree ID"
|
||||||
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
@@ -1,4 +1,4 @@
|
|||||||
import {Date as TopolaDate, DateRange, getDate, DateOrRange} from 'topola';
|
import {Date as TopolaDate, DateOrRange, DateRange, getDate} from 'topola';
|
||||||
import {InjectedIntl} from 'react-intl';
|
import {InjectedIntl} from 'react-intl';
|
||||||
|
|
||||||
const DATE_QUALIFIERS = new Map([
|
const DATE_QUALIFIERS = new Map([
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import {GedcomEntry, parse as parseGedcom} from 'parse-gedcom';
|
||||||
import {
|
import {
|
||||||
JsonFam,
|
JsonFam,
|
||||||
JsonGedcomData,
|
JsonGedcomData,
|
||||||
@@ -6,7 +7,6 @@ import {
|
|||||||
JsonImage,
|
JsonImage,
|
||||||
JsonEvent,
|
JsonEvent,
|
||||||
} from 'topola';
|
} from 'topola';
|
||||||
import {GedcomEntry, parse as parseGedcom} from 'parse-gedcom';
|
|
||||||
|
|
||||||
export interface GedcomData {
|
export interface GedcomData {
|
||||||
/** The HEAD entry. */
|
/** The HEAD entry. */
|
||||||
Reference in New Issue
Block a user