커밋
This commit is contained in:
parent
4403cada93
commit
6c279e5754
83
documents/업무/2월/2째주/phone-fomatter.txt
Normal file
83
documents/업무/2월/2째주/phone-fomatter.txt
Normal file
|
@ -0,0 +1,83 @@
|
|||
libphonenumber-js ^0.4.19
|
||||
default_country: "KR"
|
||||
metadata:
|
||||
KR: Array(6)
|
||||
0: "82"
|
||||
1: "00(?:3\d{8,9}|7\d{9,11})|[1-7]\d{4,9}|8\d{8}"
|
||||
2:
|
||||
0: (3) ["(\d{2})(\d{3,4})", "$1-$2", Array(1)]
|
||||
1: (4) ["(\d{4})(\d{4})", "$1-$2", Array(2), "$1"]
|
||||
2: (3) ["(\d{5})", "$1", Array(3)]
|
||||
3: (3) ["(\d)(\d{3,4})(\d{4})", "$1-$2-$3", Array(1)]
|
||||
4: (3) ["(\d{2})(\d{3})(\d{4})", "$1-$2-$3", Array(1)]
|
||||
5: (3) ["(\d{2})(\d{3,4})(\d{4})", "$1-$2-$3", Array(1)]
|
||||
6: (3) ["(\d{2})(\d{4})(\d{4})", "$1-$2-$3", Array(1)]
|
||||
3: "0"
|
||||
4: "0$1"
|
||||
5: "0(8[1-46-8]|85\d{2})?"
|
||||
length: 6
|
||||
parsed_input: "01040"
|
||||
current_output: ""
|
||||
national_prefix: "0"
|
||||
national_number: "1040"
|
||||
country: "KR"
|
||||
country_metadata: (6) ["82", "00(?:3\d{8,9}|7\d{9,11})|[1-7]\d{4,9}|8\d{8}", Array(7), "0", "0$1", "0(8[1-46-8]|85\d{2})?"]
|
||||
country_phone_code: "82"
|
||||
available_formats: (7) [Array(3), Array(4), Array(3), Array(3), Array(3), Array(3), Array(3)]
|
||||
matching_formats: [Array(3)]
|
||||
chosen_format: (3) ["(\d{2})(\d{3,4})(\d{4})", "$1-$2-$3", Array(1)]
|
||||
template: "xxx-xxxx-xxxx"
|
||||
partially_populated_template: "010-40xx-xxxx"
|
||||
last_match_position: 5
|
||||
|
||||
|
||||
|
||||
latest
|
||||
options: {}
|
||||
metadata: Metadata {metadata: {…}, v1: false, v2: false, v3: false, v4: true, …}
|
||||
defaultCountry: "KR"
|
||||
formattedOutput: "01031"
|
||||
international: undefined
|
||||
countryCallingCode: undefined
|
||||
digits: "01031"
|
||||
nationalNumberDigits: "1031"
|
||||
nationalPrefix: "0"
|
||||
carrierCode: ""
|
||||
country: "KR"
|
||||
matchingFormats: (2) [Format, Format]
|
||||
chosenFormat: Format {_format: Array(3), metadata: NumberingPlan}
|
||||
template: "xxxxx-xxxx"
|
||||
populatedNationalNumberTemplate: "01031-xxxx"
|
||||
populatedNationalNumberTemplatePosition: 4
|
||||
|
||||
|
||||
|
||||
altKey: false
|
||||
bubbles: true
|
||||
cancelBubble: false
|
||||
cancelable: true
|
||||
charCode: 0
|
||||
code: "Digit1"
|
||||
composed: true
|
||||
ctrlKey: false
|
||||
currentTarget: input#mat-input-4.mat-input-element.mat-form-field-autofill-control.cdk-text-field-autofill-monitored
|
||||
defaultPrevented: false
|
||||
detail: 0
|
||||
eventPhase: 2
|
||||
isComposing: false
|
||||
isTrusted: true
|
||||
key: "1"
|
||||
keyCode: 49
|
||||
location: 0
|
||||
metaKey: false
|
||||
path: (11) [input#mat-input-4.mat-input-element.mat-form-field-autofill-control.cdk-text-field-autofill-monitor…, div.expired-text, ucap-call-dial-pad.ng-star-inserted, mat-dialog-container#mat-dialog-0.mat-dialog-container.ng-tns-c48-33.ng-trigger.ng-trigger-dialogCo…, div#cdk-overlay-0.cdk-overlay-pane, div.cdk-global-overlay-wrapper, div.cdk-overlay-container, body.theme-default.ng-tns-0-0, html, document, global]
|
||||
repeat: false
|
||||
returnValue: true
|
||||
shiftKey: false
|
||||
sourceCapabilities: InputDeviceCapabilities {firesTouchEvents: false}
|
||||
srcElement: input#mat-input-4.mat-input-element.mat-form-field-autofill-control.cdk-text-field-autofill-monitored
|
||||
target: input#mat-input-4.mat-input-element.mat-form-field-autofill-control.cdk-text-field-autofill-monitored
|
||||
timeStamp: 141697.48999999138
|
||||
type: "keydown"
|
||||
view: global {parent: global, postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, …}
|
||||
which: 49
|
|
@ -68,6 +68,9 @@ export class AlbumBoxComponent implements OnInit, OnDestroy {
|
|||
|
||||
playable = true;
|
||||
|
||||
urlList: string[];
|
||||
currentIndex = 0;
|
||||
|
||||
constructor(
|
||||
private store: Store<any>,
|
||||
private sessionStorageService: SessionStorageService,
|
||||
|
@ -147,6 +150,9 @@ export class AlbumBoxComponent implements OnInit, OnDestroy {
|
|||
}
|
||||
|
||||
getImageUrl(fileInfo: FileInfoTotal): string {
|
||||
if(FileType.Bundle === fileInfo.info.type && !!this.urlList) {
|
||||
return this.urlList[this.currentIndex];
|
||||
}
|
||||
return this.commonApiService.urlForFileTalkDownload(
|
||||
{
|
||||
userSeq: this.loginRes.userSeq,
|
||||
|
@ -158,6 +164,10 @@ export class AlbumBoxComponent implements OnInit, OnDestroy {
|
|||
);
|
||||
}
|
||||
|
||||
getThumbnailForBundle(info: Info<BundleImageEventJson>, index: number) {
|
||||
return `${info.sentMessageJson.baseUrl}${info.sentMessageJson.thumbUrls[index]}`;
|
||||
}
|
||||
|
||||
onErrorThumbnail(el: HTMLElement, fileInfo: FileInfoTotal): void {
|
||||
const iconEl = document.createElement('div');
|
||||
iconEl.setAttribute(
|
||||
|
@ -174,7 +184,9 @@ export class AlbumBoxComponent implements OnInit, OnDestroy {
|
|||
if (this.currentTabIndex === 0) {
|
||||
// Image
|
||||
this.filteredList = this.fileInfoTotal.filter(
|
||||
fileInfo => fileInfo.info.type === FileType.Image
|
||||
fileInfo =>
|
||||
fileInfo.info.type === FileType.Image ||
|
||||
fileInfo.info.type === FileType.Bundle
|
||||
);
|
||||
} else {
|
||||
// Video
|
||||
|
@ -192,6 +204,22 @@ export class AlbumBoxComponent implements OnInit, OnDestroy {
|
|||
|
||||
this.playable = true;
|
||||
this.selectedFile = fileInfo;
|
||||
|
||||
if (FileType.Bundle === fileInfo.info.type) {
|
||||
this.urlList = [];
|
||||
const bundleJson = fileInfo.info.sentMessageJson as BundleImageEventJson;
|
||||
bundleJson.thumbUrls.forEach((thumb, index) => {
|
||||
this.urlList.push(
|
||||
`${bundleJson.baseUrl}${bundleJson.thumbUrls[index]}`
|
||||
.replace('WebFile', 'AttFile')
|
||||
.replace('.thumb.jpg','')
|
||||
);
|
||||
});
|
||||
this.currentIndex = 0;
|
||||
} else {
|
||||
this.urlList = undefined;
|
||||
this.currentIndex = 0;
|
||||
}
|
||||
}
|
||||
|
||||
getCheckItem(fileInfo: FileInfoTotal) {
|
||||
|
@ -261,4 +289,22 @@ export class AlbumBoxComponent implements OnInit, OnDestroy {
|
|||
this.playable = false;
|
||||
}
|
||||
}
|
||||
|
||||
onclickBundleImagePrev() {
|
||||
if (!this.urlList || 0 === this.urlList.length || 0 === this.currentIndex) {
|
||||
return;
|
||||
}
|
||||
this.currentIndex--;
|
||||
}
|
||||
|
||||
onClickBundleImageNext() {
|
||||
if (
|
||||
!this.urlList ||
|
||||
0 === this.urlList.length ||
|
||||
this.urlList.length - 1 <= this.currentIndex
|
||||
) {
|
||||
return;
|
||||
}
|
||||
this.currentIndex++;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,6 @@ export interface BundleImageEventJson {
|
|||
fileCount?: number;
|
||||
baseUrl?: string;
|
||||
thumbUrls?: string[];
|
||||
fileType?: FileType;
|
||||
}
|
||||
|
||||
export const decodeBundleImageEventJson: EventJsonDecoder<BundleImageEventJson> = (
|
||||
|
|
|
@ -177,45 +177,6 @@ export class CommonApiService {
|
|||
);
|
||||
}
|
||||
|
||||
public fileTalkSaveMulti(
|
||||
req: FileTalkSaveMultiRequest,
|
||||
fileTalkSaveMultiUrl?: string
|
||||
): Observable<FileTalkSaveMultiResponse> {
|
||||
const httpReq = new HttpRequest(
|
||||
'POST',
|
||||
!!fileTalkSaveMultiUrl
|
||||
? fileTalkSaveMultiUrl
|
||||
: this.urls.fileTalkSaveMulti,
|
||||
encodeFileTalkSaveMulti(req),
|
||||
{ reportProgress: true, responseType: 'text' as 'json' }
|
||||
);
|
||||
|
||||
const progressList: Subject<number>[] = [];
|
||||
for (const p of req.fileUploadItems) {
|
||||
progressList.push(p.uploadStart());
|
||||
}
|
||||
|
||||
return this.httpClient.request(httpReq).pipe(
|
||||
filter(event => {
|
||||
if (event instanceof HttpResponse) {
|
||||
return true;
|
||||
} else if (HttpEventType.UploadProgress === event.type) {
|
||||
// progress.next(Math.round((100 * event.loaded) / event.total));
|
||||
for (const progress of progressList) {
|
||||
progress.next(Math.round((100 * event.loaded) / event.total));
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}),
|
||||
map((event: HttpResponse<any>) => {
|
||||
for (const p of req.fileUploadItems) {
|
||||
p.uploadComplete();
|
||||
}
|
||||
return decodeFileTalkSaveMulti(event.body);
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
public fileTalkSave(
|
||||
req: FileTalkSaveRequest,
|
||||
fileTalkSaveUrl?: string
|
||||
|
@ -245,6 +206,37 @@ export class CommonApiService {
|
|||
);
|
||||
}
|
||||
|
||||
public fileTalkSaveMulti(
|
||||
req: FileTalkSaveMultiRequest,
|
||||
fileTalkSaveMultiUrl?: string
|
||||
): Observable<FileTalkSaveMultiResponse> {
|
||||
const httpReq = new HttpRequest(
|
||||
'POST',
|
||||
!!fileTalkSaveMultiUrl
|
||||
? fileTalkSaveMultiUrl
|
||||
: this.urls.fileTalkSaveMulti,
|
||||
encodeFileTalkSaveMulti(req),
|
||||
{ reportProgress: true, responseType: 'text' as 'json' }
|
||||
);
|
||||
|
||||
const progress = req.fileUploadItem.uploadStart();
|
||||
|
||||
return this.httpClient.request(httpReq).pipe(
|
||||
filter(event => {
|
||||
if (event instanceof HttpResponse) {
|
||||
return true;
|
||||
} else if (HttpEventType.UploadProgress === event.type) {
|
||||
progress.next(Math.round((100 * event.loaded) /event.total));
|
||||
}
|
||||
return false;
|
||||
}),
|
||||
map((event: HttpResponse<any) => {
|
||||
req.fileUploadItem.uploadComplete();
|
||||
return decodeFileTalkSaveMulti(event.body);
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
public acceptableExtensionForFileTalk(
|
||||
extensions: string[]
|
||||
): { accept: boolean; reject: string[] } {
|
||||
|
|
|
@ -16,9 +16,8 @@ export interface FileTalkSaveMultiRequest extends APIRequest {
|
|||
deviceType: DeviceType;
|
||||
token: string;
|
||||
files: File[];
|
||||
fileUploadItems: FileUploadItem[];
|
||||
fileUploadItems: FileUploadItem;
|
||||
roomSeq?: string;
|
||||
type?: string;
|
||||
}
|
||||
|
||||
export interface FileTalkSaveMultiResponse extends APIResponse {
|
||||
|
@ -36,7 +35,7 @@ const fileTalkSaveEncodeMapTemp = {
|
|||
deviceType: 'p_device_type',
|
||||
token: 'p_token',
|
||||
roomSeq: 'p_room_id',
|
||||
files: 'file[]',
|
||||
files: 'file',
|
||||
type: 'p_type'
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user