Genealogy as a feature (#175)
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			Start our journey into turning GeneIT as afully featured family intranet by making genealogy a feature that can be disabled by family admins Reviewed-on: #175
This commit is contained in:
		@@ -1,6 +1,6 @@
 | 
			
		||||
import { APIClient } from "./ApiClient";
 | 
			
		||||
import { Couple } from "./CoupleApi";
 | 
			
		||||
import { Member } from "./MemberApi";
 | 
			
		||||
import { Couple } from "./genealogy/CoupleApi";
 | 
			
		||||
import { Member } from "./genealogy/MemberApi";
 | 
			
		||||
 | 
			
		||||
interface FamilyAPI {
 | 
			
		||||
  user_id: number;
 | 
			
		||||
@@ -60,7 +60,8 @@ export class Family implements FamilyAPI {
 | 
			
		||||
   */
 | 
			
		||||
  memberURL(member: Member, edit?: boolean): string {
 | 
			
		||||
    return (
 | 
			
		||||
      `/family/${this.family_id}/member/${member.id}` + (edit ? "/edit" : "")
 | 
			
		||||
      `/family/${this.family_id}/genealogy/member/${member.id}` +
 | 
			
		||||
      (edit ? "/edit" : "")
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -68,7 +69,7 @@ export class Family implements FamilyAPI {
 | 
			
		||||
   * Get family tree URL for member
 | 
			
		||||
   */
 | 
			
		||||
  familyTreeURL(member: Member | number): string {
 | 
			
		||||
    return `/family/${this.family_id}/tree/${
 | 
			
		||||
    return `/family/${this.family_id}/genealogy/tree/${
 | 
			
		||||
      typeof member === "number" ? member : member.id
 | 
			
		||||
    }`;
 | 
			
		||||
  }
 | 
			
		||||
@@ -78,16 +79,19 @@ export class Family implements FamilyAPI {
 | 
			
		||||
   */
 | 
			
		||||
  coupleURL(member: Couple, edit?: boolean): string {
 | 
			
		||||
    return (
 | 
			
		||||
      `/family/${this.family_id}/couple/${member.id}` + (edit ? "/edit" : "")
 | 
			
		||||
      `/family/${this.family_id}/genealogy/couple/${member.id}` +
 | 
			
		||||
      (edit ? "/edit" : "")
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export class ExtendedFamilyInfo extends Family {
 | 
			
		||||
  public disable_couple_photos: boolean;
 | 
			
		||||
  public enable_genealogy: boolean;
 | 
			
		||||
  constructor(p: any) {
 | 
			
		||||
    super(p);
 | 
			
		||||
    this.disable_couple_photos = p.disable_couple_photos;
 | 
			
		||||
    this.enable_genealogy = p.enable_genealogy;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -229,14 +233,16 @@ export class FamilyApi {
 | 
			
		||||
   */
 | 
			
		||||
  static async UpdateFamily(settings: {
 | 
			
		||||
    id: number;
 | 
			
		||||
    name: string;
 | 
			
		||||
    disable_couple_photos: boolean;
 | 
			
		||||
    name?: string;
 | 
			
		||||
    enable_genealogy?: boolean;
 | 
			
		||||
    disable_couple_photos?: boolean;
 | 
			
		||||
  }): Promise<void> {
 | 
			
		||||
    await APIClient.exec({
 | 
			
		||||
      method: "PATCH",
 | 
			
		||||
      uri: `/family/${settings.id}`,
 | 
			
		||||
      jsonData: {
 | 
			
		||||
        name: settings.name,
 | 
			
		||||
        enable_genealogy: settings.enable_genealogy,
 | 
			
		||||
        disable_couple_photos: settings.disable_couple_photos,
 | 
			
		||||
      },
 | 
			
		||||
    });
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
import { APIClient } from "./ApiClient";
 | 
			
		||||
import { APIClient } from "../ApiClient";
 | 
			
		||||
import { DateValue, Member } from "./MemberApi";
 | 
			
		||||
import { ServerApi } from "./ServerApi";
 | 
			
		||||
import { ServerApi } from "../ServerApi";
 | 
			
		||||
 | 
			
		||||
interface CoupleApiInterface {
 | 
			
		||||
  id: number;
 | 
			
		||||
@@ -161,7 +161,7 @@ export class CoupleApi {
 | 
			
		||||
   */
 | 
			
		||||
  static async Create(m: Couple): Promise<Couple> {
 | 
			
		||||
    const res = await APIClient.exec({
 | 
			
		||||
      uri: `/family/${m.family_id}/couple/create`,
 | 
			
		||||
      uri: `/family/${m.family_id}/genealogy/couple/create`,
 | 
			
		||||
      method: "POST",
 | 
			
		||||
      jsonData: m,
 | 
			
		||||
    });
 | 
			
		||||
@@ -177,7 +177,7 @@ export class CoupleApi {
 | 
			
		||||
    couple_id: number
 | 
			
		||||
  ): Promise<Couple> {
 | 
			
		||||
    const res = await APIClient.exec({
 | 
			
		||||
      uri: `/family/${family_id}/couple/${couple_id}`,
 | 
			
		||||
      uri: `/family/${family_id}/genealogy/couple/${couple_id}`,
 | 
			
		||||
      method: "GET",
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@@ -189,7 +189,7 @@ export class CoupleApi {
 | 
			
		||||
   */
 | 
			
		||||
  static async GetEntireList(family_id: number): Promise<CouplesList> {
 | 
			
		||||
    const res = await APIClient.exec({
 | 
			
		||||
      uri: `/family/${family_id}/couples`,
 | 
			
		||||
      uri: `/family/${family_id}/genealogy/couples`,
 | 
			
		||||
      method: "GET",
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@@ -201,7 +201,7 @@ export class CoupleApi {
 | 
			
		||||
   */
 | 
			
		||||
  static async Update(m: Couple): Promise<void> {
 | 
			
		||||
    await APIClient.exec({
 | 
			
		||||
      uri: `/family/${m.family_id}/couple/${m.id}`,
 | 
			
		||||
      uri: `/family/${m.family_id}/genealogy/couple/${m.id}`,
 | 
			
		||||
      method: "PUT",
 | 
			
		||||
      jsonData: m,
 | 
			
		||||
    });
 | 
			
		||||
@@ -214,7 +214,7 @@ export class CoupleApi {
 | 
			
		||||
    const fd = new FormData();
 | 
			
		||||
    fd.append("photo", b);
 | 
			
		||||
    await APIClient.exec({
 | 
			
		||||
      uri: `/family/${m.family_id}/couple/${m.id}/photo`,
 | 
			
		||||
      uri: `/family/${m.family_id}/genealogy/couple/${m.id}/photo`,
 | 
			
		||||
      method: "PUT",
 | 
			
		||||
      formData: fd,
 | 
			
		||||
    });
 | 
			
		||||
@@ -225,7 +225,7 @@ export class CoupleApi {
 | 
			
		||||
   */
 | 
			
		||||
  static async RemoveCouplePhoto(m: Couple): Promise<void> {
 | 
			
		||||
    await APIClient.exec({
 | 
			
		||||
      uri: `/family/${m.family_id}/couple/${m.id}/photo`,
 | 
			
		||||
      uri: `/family/${m.family_id}/genealogy/couple/${m.id}/photo`,
 | 
			
		||||
      method: "DELETE",
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
@@ -235,7 +235,7 @@ export class CoupleApi {
 | 
			
		||||
   */
 | 
			
		||||
  static async Delete(m: Couple): Promise<void> {
 | 
			
		||||
    await APIClient.exec({
 | 
			
		||||
      uri: `/family/${m.family_id}/couple/${m.id}`,
 | 
			
		||||
      uri: `/family/${m.family_id}/genealogy/couple/${m.id}`,
 | 
			
		||||
      method: "DELETE",
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
import { APIClient } from "./ApiClient";
 | 
			
		||||
import { APIClient } from "../ApiClient";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Data management api client
 | 
			
		||||
@@ -9,7 +9,7 @@ export class DataApi {
 | 
			
		||||
   */
 | 
			
		||||
  static async ExportData(family_id: number): Promise<Blob> {
 | 
			
		||||
    const res = await APIClient.exec({
 | 
			
		||||
      uri: `/family/${family_id}/data/export`,
 | 
			
		||||
      uri: `/family/${family_id}/genealogy/data/export`,
 | 
			
		||||
      method: "GET",
 | 
			
		||||
    });
 | 
			
		||||
    return res.data;
 | 
			
		||||
@@ -22,7 +22,7 @@ export class DataApi {
 | 
			
		||||
    const fd = new FormData();
 | 
			
		||||
    fd.append("archive", archive);
 | 
			
		||||
    const res = await APIClient.exec({
 | 
			
		||||
      uri: `/family/${family_id}/data/import`,
 | 
			
		||||
      uri: `/family/${family_id}/genealogy/data/import`,
 | 
			
		||||
      method: "PUT",
 | 
			
		||||
      formData: fd,
 | 
			
		||||
    });
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
import { APIClient } from "./ApiClient";
 | 
			
		||||
import { APIClient } from "../ApiClient";
 | 
			
		||||
import { Couple } from "./CoupleApi";
 | 
			
		||||
 | 
			
		||||
export type Sex = "M" | "F";
 | 
			
		||||
@@ -278,7 +278,7 @@ export class MemberApi {
 | 
			
		||||
   */
 | 
			
		||||
  static async Create(m: Member): Promise<Member> {
 | 
			
		||||
    const res = await APIClient.exec({
 | 
			
		||||
      uri: `/family/${m.family_id}/member/create`,
 | 
			
		||||
      uri: `/family/${m.family_id}/genealogy/member/create`,
 | 
			
		||||
      method: "POST",
 | 
			
		||||
      jsonData: m,
 | 
			
		||||
    });
 | 
			
		||||
@@ -294,7 +294,7 @@ export class MemberApi {
 | 
			
		||||
    member_id: number
 | 
			
		||||
  ): Promise<Member> {
 | 
			
		||||
    const res = await APIClient.exec({
 | 
			
		||||
      uri: `/family/${family_id}/member/${member_id}`,
 | 
			
		||||
      uri: `/family/${family_id}/genealogy/member/${member_id}`,
 | 
			
		||||
      method: "GET",
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@@ -306,7 +306,7 @@ export class MemberApi {
 | 
			
		||||
   */
 | 
			
		||||
  static async GetEntireList(family_id: number): Promise<MembersList> {
 | 
			
		||||
    const res = await APIClient.exec({
 | 
			
		||||
      uri: `/family/${family_id}/members`,
 | 
			
		||||
      uri: `/family/${family_id}/genealogy/members`,
 | 
			
		||||
      method: "GET",
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@@ -318,7 +318,7 @@ export class MemberApi {
 | 
			
		||||
   */
 | 
			
		||||
  static async Update(m: Member): Promise<void> {
 | 
			
		||||
    await APIClient.exec({
 | 
			
		||||
      uri: `/family/${m.family_id}/member/${m.id}`,
 | 
			
		||||
      uri: `/family/${m.family_id}/genealogy/member/${m.id}`,
 | 
			
		||||
      method: "PUT",
 | 
			
		||||
      jsonData: m,
 | 
			
		||||
    });
 | 
			
		||||
@@ -331,7 +331,7 @@ export class MemberApi {
 | 
			
		||||
    const fd = new FormData();
 | 
			
		||||
    fd.append("photo", b);
 | 
			
		||||
    await APIClient.exec({
 | 
			
		||||
      uri: `/family/${m.family_id}/member/${m.id}/photo`,
 | 
			
		||||
      uri: `/family/${m.family_id}/genealogy/member/${m.id}/photo`,
 | 
			
		||||
      method: "PUT",
 | 
			
		||||
      formData: fd,
 | 
			
		||||
    });
 | 
			
		||||
@@ -342,7 +342,7 @@ export class MemberApi {
 | 
			
		||||
   */
 | 
			
		||||
  static async RemoveMemberPhoto(m: Member): Promise<void> {
 | 
			
		||||
    await APIClient.exec({
 | 
			
		||||
      uri: `/family/${m.family_id}/member/${m.id}/photo`,
 | 
			
		||||
      uri: `/family/${m.family_id}/genealogy/member/${m.id}/photo`,
 | 
			
		||||
      method: "DELETE",
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
@@ -352,7 +352,7 @@ export class MemberApi {
 | 
			
		||||
   */
 | 
			
		||||
  static async Delete(m: Member): Promise<void> {
 | 
			
		||||
    await APIClient.exec({
 | 
			
		||||
      uri: `/family/${m.family_id}/member/${m.id}`,
 | 
			
		||||
      uri: `/family/${m.family_id}/genealogy/member/${m.id}`,
 | 
			
		||||
      method: "DELETE",
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
		Reference in New Issue
	
	Block a user